Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: japarrado en 18 Julio 2013, 22:01 pm



Título: AYUDA BATCH COMODIN ?
Publicado por: japarrado en 18 Julio 2013, 22:01 pm
Buen día amigos, he encontrado excelente información en este foro, por este motivo recurro a ustedes.

Tengo un problema, estoy elaborando un .bat para mover los archivos que cumplan la siguiente característica:
??_T????.sql (dos letras cualesquiera, un raya al piso, seguido de una T y por ultimo 4 letras cualesquiera; la extensión de todos los archivos es .sql)
puedo tener archivos con los siguientes nombres, por ejemplo:

Código:
CP_TOITM.sql
FD_TOPER.sql
FD_TINAC.sql

tengo la siguiente parte de código en el script:

Código
  1. FOR %%a in (??_T????.sql) DO (
  2.  move %%a %v_incidente%\%v_incidente%\SCRIPTS
  3.  @echo @@%%a   >> %v_incidente%\%v_incidente%\SCRIPTS\INSTALADOR.sql
  4. )

el problema que tengo es que ademas de estarme moviendo los archivos con cuatro letras despues de "_T" tambien me mueve archivos como:
Código:
AD_TCLTB_COM.sql
AD_TPLAN_PKY.sql

Los  cuales debo mover después en otra parte del código con:

Código
  1. FOR %%a in (??_COL*.sql) DO (
  2.  @echo @@%%a  >> %v_incidente%\%v_incidente%\SCRIPTS\INSTALADOR.sql
  3.  move %%a %v_incidente%\%v_incidente%\SCRIPTS
  4. )

No he podido limitar el for para que solo me mueva los archivos que necesito.

Como lo podría hacer? que tengo mal?
Muchas gracias por su colaboración, que tengan un excelente día.


Título: Re: AYUDA BATCH COMODIN ?
Publicado por: Eleкtro en 19 Julio 2013, 12:09 pm
@japarrado

Hola,
Usa el botón de insertar código, lee mi firma.





el problema que tengo es que ademas de estarme moviendo los archivos con cuatro letras despues de "_T" tambien me mueve archivos como:

que tengo mal?

No hay ningún problema con dicho FOR, el patrón de búsqueda es correcto y no matchea archivos que tengan más de 4 caracteres después de la "T". El problema está en otra parte del código que no nos has mostrado todavía.

Puedes probar esto, pero es exáctamente lo mismo, y como ya digo tu primer FOR funciona corréctamente:

Código
  1. FOR /F %%a in ('Dir /B /S "??_T????.sql"')  DO (
  2. echo %%a
  3.   rem move %%a %v_incidente%\%v_incidente%\SCRIPTS
  4. rem  @echo @@%%a   >> %v_incidente%\%v_incidente%\SCRIPTS\INSTALADOR.sql
  5. )

Saludos


Título: Re: AYUDA BATCH COMODIN ?
Publicado por: Meine programmen en 19 Julio 2013, 13:09 pm
Puedes probar esto, pero es exáctamente lo mismo, y como ya digo tu primer FOR funciona corréctamente:
Yo probe desde la consola
Código:
FOR %A IN (??_T????.sql) DO (echo %A)
Teniendo dos archivos (HN_TGGGH.sql y HN_TGG_TGH.sql) y me devuelve los dos archivos. Con este codigo en cambio si que me ha devuelto solo el primero:
Código:
setlocal enabledelayedexpansion
FOR %%a in (??_T????.sql) do (set a=%%a
set a=??!a:~2,2!????!a:~8,4!
if !a!==??_T????.sql (echo %%a))
Luego probe tambien tu codigo
Código
  1. FOR /F %%a in ('Dir /B /S "??_T????.sql"')  DO (
  2. echo %%a
  3.   rem move %%a %v_incidente%\%v_incidente%\SCRIPTS
  4. rem  @echo @@%%a   >> %v_incidente%\%v_incidente%\SCRIPTS\INSTALADOR.sql
  5. )
Y me devuelve tambien los dos archivos.


Título: Re: AYUDA BATCH COMODIN ?
Publicado por: Eleкtro en 19 Julio 2013, 15:41 pm
@Meine programmen

Lo acabo de testear de la manera en la que has comentado y exáctamente con los dos mismos nombres de archivo,
Sigo reafirmando que el código de @japarrado funciona y no necesita ninguna modificación, al menos bajo Windows 8.

Es óbvio que si ustedes dos dicen que no funciona entonces aquí hay un nuevo problema descubierto, el problema es que en la versión de Windows que estén utilizando hay un bug respecto al keyword: "?".

La solución es actualizar la plataforma de Windows, o seguir las indicaciones del compañero @Meine programmen.

PD: Siento no haber podido ayudar de mejor forma esta vez, era imposible deducir que se trataba de un bug de una versión anterior de Windows, era más fácil asumir que el usuario se habia equivocado al afirmar que NO funcionaba el código.

Un saludo!