Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Aranguez en 4 Octubre 2009, 16:31 pm



Título: Identificar el tipo de archivo antes de procesarlo [batch]
Publicado por: Aranguez en 4 Octubre 2009, 16:31 pm
Hola a todos, tengo un batch que procesa arcivos que los usuarios dejan en un directorio; parte del codigo despues de acceder el directorio es:
.
.
@FOR /F "tokens=1,2,3,4,5,6,7,8,9,10,11,12* delims=+:" %%i IN ('type %2') DO (
.
.
)
el caso es que funciona perfecto siempre que los archivos sean ASCII, pero si el usuario por equivocación pone en ese diretorio un binario (musica, video etc), entonces el código no funciona, quisiera saber si hay una instrucción que se ponga previa al tratatamiento de archivo (for) que pueda identificar el tipo de archivo y así saltar el for.

Gracias por la ayuda que me puedan dar al respecto


Título: Re: Identificar el tipo de archivo antes de procesarlo [batch]
Publicado por: kevlar en 4 Octubre 2009, 23:08 pm

Lo unico que se me ocurre es que uses la extensión del archivo para saltar el for

if %~x2 EQU txt  (


REM tu for

)



Título: Re: Identificar el tipo de archivo antes de procesarlo [batch]
Publicado por: FranciskoAsdf en 4 Octubre 2009, 23:15 pm
podría ser con un IF ? a ver por ejemplo:

suponiendo que estas en "%UserProfile%\Escritorio\" sería algo como


Código
  1. @echo off
  2. REM codigo anterior al for
  3. Md tempfiles
  4. If Exist *.jpg (Move /y *.jpg "%UserProfile%\Escritorio\tempfiles\")
  5. If Exist *.avi (Move /y *.avi "%UserProfile%\Escritorio\tempfiles\")
  6. REM el for


Sería algo asi, obviamente tu tienes que ir añadiendo extensiones.-
Se puede hacer con for pero no me acuerdo como es, en el foro habia un post donde mostraban un codigo que movian archivos con extesiones especificas a carpetas con FOR, aunque io creo que es lo mismo xD.

Saludos espero haberte ayudado


Título: Re: Identificar el tipo de archivo antes de procesarlo [batch]
Publicado por: Aranguez en 5 Octubre 2009, 02:37 am
Mil gracias por sus prontas respuestas, tomaré la idea que me están sugiriendo, pero filtraré más bien las extensiones de los archivos que procesaré que son menos que las posibles que puedan poner los usuarioe en el directorio, el programa procesará solo los txt, dat y los que no tengan extensión, aqui mi duda como pregunto si el archivo no tiene extesión? el codigo de filtro antes del for queda así, pero faltaría preguntar sin no tiene extesión.

if %~x1 ==.txt GOTO :PROCESAASCII
if %~x1 ==.TXT GOTO :PROCESAASCII
if %~x1 ==.dat GOTO :PROCESAASCII
if %~x1 ==.DAT GOTO :PROCESAASCII

GOTO :PROCESABINARIO


Título: Re: Identificar el tipo de archivo antes de procesarlo [batch]
Publicado por: FranciskoAsdf en 5 Octubre 2009, 02:47 am
puede ser algo asi

Código
  1. if %~x1 ==. GOTO :ProcesaAscii
  2. Goto :ProcesarBinario
  3.  

pruebalo a ver si te funciona, aunque mmm tengo mis dudas, o puedes probar con:

Código
  1. if %~x1 =="" GOTO :ProcesaAscii
  2. Goto :ProcesaBinario
  3.  

porke si no tiene extension quedaria vacio :S...

Sorry por no poder ayudar mas, pero no se me ocurre otra cosa, espero que te funcione ^^

Saludos


Título: Re: Identificar el tipo de archivo antes de procesarlo [batch]
Publicado por: Aranguez en 5 Octubre 2009, 02:59 am
la instrucción ;

if %~x1 =="" GOTO :ProcesaAscii

no funciona da error porque esta vacio. se te ocurre otra manera?


Título: Re: Identificar el tipo de archivo antes de procesarlo [batch]
Publicado por: 0x0309 en 5 Octubre 2009, 06:23 am
Podrías hacer:

Código:
set rutaArchivo=C:\archivo.txt

for %%f in ("%rutaArchivo%") do for %%e in (.txt .src .log) do if "%%~xf"=="%%e" goto :Valido


:noValido
echo.Extension no valida.
goto :eof

:Valido
echo.Valido
pause



Título: Re: Identificar el tipo de archivo antes de procesarlo [batch]
Publicado por: Aranguez en 5 Octubre 2009, 17:30 pm
Muchas gracias por tu ayuda, ademas me gusta la forma en que encierras el filtro, pero sigue quedando afuera los archivos que no tienen extensión y que si deben ser procesados. Se te ocurre otra forma de que formen parte del filtro?


Título: Re: Identificar el tipo de archivo antes de procesarlo [batch]
Publicado por: 0x0309 en 5 Octubre 2009, 19:21 pm
Claro, reemplaza por esto:

Código:
for %%f in ("%rutaArchivo%") do for %%e in (.txt .src .log "") do if "%%~xf"=="%%~e" goto :Valido


Título: Re: Identificar el tipo de archivo antes de procesarlo [batch]
Publicado por: Aranguez en 5 Octubre 2009, 20:21 pm
PERFECTO, funciona como yo quería, MIL gracias por tu ayuda.

Saludos


Título: Re: Identificar el tipo de archivo antes de procesarlo [batch]
Publicado por: Aranguez en 6 Octubre 2009, 00:45 am
Mil gracias a todos los que me ayudaron. (SOLUCIONADO)


Título: Re: Identificar el tipo de archivo antes de procesarlo [batch]
Publicado por: Aranguez en 13 Octubre 2009, 18:18 pm
SOLUCIONADO gracias a todos