Identificar el tipo de archivo antes de procesarlo [batch]

Iniciado por Aranguez, 4 Octubre 2009, 16:31 PM

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

Aranguez

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

kevlar


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

)


FranciskoAsdf

podría ser con un IF ? a ver por ejemplo:

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


Código (dos) [Seleccionar]
@echo off
REM codigo anterior al for
Md tempfiles
If Exist *.jpg (Move /y *.jpg "%UserProfile%\Escritorio\tempfiles\")
If Exist *.avi (Move /y *.avi "%UserProfile%\Escritorio\tempfiles\")
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
Asdf debería ser algún tipo de función.

Aranguez

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

FranciskoAsdf

puede ser algo asi

Código (dos) [Seleccionar]

if %~x1 ==. GOTO :ProcesaAscii
Goto :ProcesarBinario


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

Código (dos) [Seleccionar]

if %~x1 =="" GOTO :ProcesaAscii
Goto :ProcesaBinario


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
Asdf debería ser algún tipo de función.

Aranguez

la instrucción ;

if %~x1 =="" GOTO :ProcesaAscii

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

0x0309

Podrías hacer:


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


Aranguez

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?

0x0309

Claro, reemplaza por esto:


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


Aranguez

PERFECTO, funciona como yo quería, MIL gracias por tu ayuda.

Saludos