Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: binario010101 en 23 Noviembre 2013, 03:18 am



Título: modificar codigo
Publicado por: binario010101 en 23 Noviembre 2013, 03:18 am
hola amigos me pueden ayudar a modificar este codigo para que copie  los archivos del resultado de la busqueda a la carpeta desde la cual se ejecuta el bat

Código:
@echo on
Set Pattern=magodeoz
Dir /B /S "%SYSTEMDRIVE%\*%Pattern%*.doc*"

pause

el codigo lo que hace es buscar cual de los archivos del disco local de extensión .doc contiene la palabra magodeoz. quiero copiar esos archivos a la usb desde la cual ejecuto el bat o a una carpeta de la usb

gracias

[MOD] "no soy ing estudio sicologia"      ¿Será Psicologia?


Título: Re: modificar codigo
Publicado por: Almapa en 23 Noviembre 2013, 08:38 am
Si el comando 'Dir' ya te saca los archivos que quieres copiar bien, sin ningún dato que pueda molestar, con un "for /f" ya podrías recorrer todas las salidas de dicho comando y por lo tanto copiarlas donde quieras. Prueba algo así:

Código:
@echo on
Set Pattern=magodeoz
Set Carpetafinal=%cd%

for /f "tokens=*" %%G in ('Dir /B /S "%SYSTEMDRIVE%\*%Pattern%*.doc*"') do (copy %%G %Carpetafinal%)

pause

Obviamente en la variable "Carpetafinal" tendrás que poner la ruta donde quieras que se copien, o de lo contrario eliminar la variable y ponerlo directamente sobre el comando.

PD: No te aseguro que vaya, pues no lo he probado.

Un saludo!


Título: Re: modificar codigo
Publicado por: binario010101 en 23 Noviembre 2013, 14:37 pm
funciona amigo el problema es que si el archivo tiene un espacio en el nombre no lo copia.

lo intente asi

Código:

E:\>Set Pattern=magodeoz

E:\>Set Carpetafinal=E:\

E:\>for /F "tokens=*" %G in ('Dir /B /S "C:\*magodeoz*.doc*"') do (copy %G E:\
)


E:\>(copy C:\Users\magodeoz (2) - copia - copia.docx E:\ )

El sistema no puede encontrar el archivo especificado.


E:\>pause
Presione una tecla para continuar . . .

probe con   " "

Código:
@echo on
Set Pattern=magodeoz
Set Carpetafinal=%cd%

for /f "tokens=*" %%G in ('Dir /B /S "%SYSTEMDRIVE%\"*%Pattern%*.doc*""') do (copy %%G %Carpetafinal%)

pause




Título: Re: modificar codigo
Publicado por: Eleкtro en 23 Noviembre 2013, 15:39 pm
Código:
"%SYSTEMDRIVE%\"*%Pattern%*.doc*""

Has escrito comillas de más.

Código:
Expresión abierta

Código:
"Expresión cerrada"

Código:
"Expresión"troll""

Código
  1. for /f "tokens=*" %%G in ('Dir /B /S "%SYSTEMDRIVE%\*%Pattern%*.doc"') do (copy "%%G" "%Carpetafinal%")

saludos


Título: Re: modificar codigo
Publicado por: binario010101 en 23 Noviembre 2013, 15:52 pm
las "" que sobran las puse para tratar de corregir el problema no funciono.

el codigo sin modificar es

Código:
for /f "tokens=*" %%G in ('Dir /B /S "%SYSTEMDRIVE%\*%Pattern%*.doc*"') do (copy %%G %Carpetafinal%)


modificado es probado asi pero se mantiene el error

Código:
for /f "tokens=*" %%G in ('Dir /B /S "%SYSTEMDRIVE%\"*%Pattern%*.doc*""') do (copy %%G %Carpetafinal%)


Título: Re: modificar codigo
Publicado por: Eleкtro en 23 Noviembre 2013, 15:54 pm
@binario010101
Arriba te puse la modificación correcta...

saludos


Título: Re: modificar codigo
Publicado por: binario010101 en 23 Noviembre 2013, 16:30 pm
ese codigo es el de el problema porque si los archivos llevan espacios en el nombre no los copia, luego publique uno a el que le puse las "" pero no soluciono el problema. entonces estoy experimentado cambiado la posicion de las "".
en algunos casos se que funcina ej cuando vas a copiar un archivo llamado (nuevo magode.doc) debes escribirlo ("nuevo magode.doc").


pero en el caso en concreto no se como hacer eso
Código:
E:\>(copy C:\Users\magodeoz (2) - copia - copia.docx E:\ )
gracias


Título: Re: modificar codigo
Publicado por: binario010101 en 23 Noviembre 2013, 16:59 pm
la solucion era colocarle las "" a %%G de esta manera "%%G"

gracias


Título: Re: modificar codigo
Publicado por: binario010101 en 23 Noviembre 2013, 17:16 pm
queda asi el codigo

Código:
@echo on
Set Pattern=magodeoz
Set Carpetafinal=%cd%

for /f "tokens=*" %%G in ('Dir /B /S "%SYSTEMDRIVE%\*%Pattern%*.doc*"') do (copy "%%G" %Carpetafinal%)

pause

o puede ser asi
Código:
@echo on
Set Pattern=*magodeoz*.doc*
Set Carpetafinal=%cd%

for /f "tokens=*" %%G in ('Dir /B /S "%SYSTEMDRIVE%\%Pattern%"') do (copy "%%G" %Carpetafinal%)

pause

ahora me pregunto si es posible que en la misma búsqueda buscar cuatro palabras, para no tener que repetir la búsqueda cuatro veces y ahorrar tiempo?
magodeoz,  patriciatapia, punk y ramones


Título: Re: modificar codigo
Publicado por: Eleкtro en 23 Noviembre 2013, 17:37 pm
ahora me pregunto si es posible que en la misma búsqueda buscar cuatro palabras, para no tener que repetir la búsqueda cuatro veces y ahorrar tiempo?

Eso requiere modificar la lógica de búsqueda complétamente,
debes dejar de usar un patrón de búsqueda en el comando Dir y en su lugar buscar todos los archivos de dicha extensión (doc), y luego filtrar la salida del comando Dir utilizando una expresión regular en el sistema de regex (tan simplón como Batch, no acepta ni Pipes) con el comando FINDSTR:

Código
  1. @Echo OFF
  2.  
  3. Set "RegEx=magodeoz patriciatapia punk ramones"
  4.  
  5. For /f "tokens=*" %%# in (
  6. 'Dir /B /S "%SYSTEMDRIVE%\*.doc" ^| FINDSTR "%RegEx%"'
  7. ) DO (
  8. Echo: "%%#"
  9. REM Copy "%%#" "%Carpetafinal%"
  10. )
  11.  
  12. Pause&Exit

PD: Que buen Rock la Patricia Tapia es única :D

saludos


Título: Re: modificar codigo
Publicado por: binario010101 en 23 Noviembre 2013, 17:55 pm
hola gracias por tu codigo lo probé este es el resultado

Código:

E:\>Set "RegEx=magodeoz patriciatapia punk ramones"

E:\>For /F "tokens=*" %# in ('Dir /B /S "C:\*.doc"' | FINDSTR "ingles patricia")
 DO (
Echo: "%#"
 REM Copy "%#" ""
)
El sistema no puede encontrar el archivo 'Dir /B /S "C:\*.doc"' | FINDSTR "ingle
s patricia".

E:\>Pause
Presione una tecla para continuar . . .

buscado soluciones

el codigo anterior debe ser modificado para que busque palabras con asentos (óz)? observo que no copia los archivos con acentos como  magodeóz entonces le coloque el hacento pero en la consola paracio fue ú. porque tengo que cambiar la codificacion?


Título: Re: modificar codigo
Publicado por: Eleкtro en 23 Noviembre 2013, 18:21 pm
@binario010101

Culpa mía, lo escribí al vuelo, me comí una comilla en la expresión del FOR, ya está corregido, vuelve a testear el código modificado de arriba

saludos


Título: Re: modificar codigo
Publicado por: binario010101 en 23 Noviembre 2013, 18:46 pm
ahora si localiza los archivos pero no los copia.
Código:

E:\>Set "RegEx=magodeoz magodeóz patriciatapia punk ramones"

E:\>For /F "tokens=*" %# in ('Dir /B /S "C:\*.doc" | FINDSTR "magodeoz magodeóz patriciat
apia punk ramones"') DO (
Echo: "%#"
 REM Copy "%#" E:\biblioteca\
)

E:\>(
Echo: "C:\Users\yo\Desktop\magodeoz.doc"
 REM Copy "C:\Users\yo\Desktop\magodeoz.doc" E:\biblioteca\
)
 "C:\Users\yo\Desktop\magodeoz.doc"

E:\>Pause
Presione una tecla para continuar . . .

agrege una nueva palabra a la busqueda. (magodeóz) pero no loscaliza los archivos con acentos. como aparece un simbolo rraro por el acento use este (?)
gracias


Título: Re: modificar codigo
Publicado por: Eleкtro en 23 Noviembre 2013, 19:14 pm
ahora si localiza los archivos pero no los copia.

Porsupuesto, no los copia, es algo intencionádo.
Vuélvete a fijar mejor en el código... debajo de la linea del echo, hay una linea de comentario, descoméntala.

PD: Te recomiendo la lectura de cualquier manual básico de Batch

Saludos!


Título: Re: modificar codigo
Publicado por: binario010101 en 23 Noviembre 2013, 19:20 pm
conoces una buena pagina donde leer todo sobre bat. e leido unas pero ya son muy repetidas

gracias
y ya borre las lineas


Título: Re: modificar codigo
Publicado por: Eleкtro en 23 Noviembre 2013, 19:27 pm
conoces una buena pagina donde leer todo doble bat. e leino unas pero ya son muy repetidas

Este (http://ss64.com/nt/syntax.html), junto a este (http://foro.elhacker.net/scripting/tema_bloqueado_hasta_finalizar_el_tuto_tutorial_extendido_de_aprendizaje_batch-t375135.0.html;msg1797907#msg1797907) otro.

saludos