Ms-Dos - comprobar si archivo vacío

 
Vista:

comprobar si archivo vacío

Publicado por Enrique (2 intervenciones) el 24/04/2009 11:45:44
he realizado un bat que me descomprime los archivos .rar y .zip en carpetas y luego me copia el contenido de esas carpetas al directorio actual cambiandoles el nombre, mi problema es que los archivos .rar pueden contener otros archivos .rar en su interior entonces he de realizar la misma operación en repetidas ocasiones, dependiendo de si existen esos .rar en el directorio actual o no.

se me ha ocurrido listar de nuevo los .rar y comprobar si ese fichero esta vacio o no

¿como puedo comprobar si un archivo está vacío o no?

os mando el código que tengo actualmente:

el zsaca.bat

del listadozip.txt
del listadorar.txt

"c:program fileswinrarwinrar.exe" e -ad *.zip
sfk145 list . .zip +filter -rep /.zip// >>listado.txt
sfk145 list . .* +filter -+ >>listado3.txt
sfk145 filter listado3.txt -rep //_/ >>listado2.txt
del *.zip
call mi_java
sfk145 filter prueba.txt +run "$file" -yes
del listado2.txt
del listado3.txt
del prueba.txt
sfk145 filter listado.txt +run "rmdir /S /Q $file" -yes
del listado.txt

"c:program fileswinrarwinrar.exe" e -ad *.rar
sfk145 list . .rar +filter -rep /.rar// >>listado.txt
sfk145 list . .* +filter -+ >>listado3.txt
sfk145 filter listado3.txt -rep //_/ >>listado2.txt
del *.rar
call mi_java
sfk145 filter prueba.txt +run "$file" -yes
del listado3.txt
del listado2.txt
del prueba.txt
sfk145 filter listado.txt +run "rmdir /S /Q $file" -yes
del listado.txt

sfk145 list . .zip +filter -rep /.zip// >>listadozip.txt
sfk145 list . .rar +filter -rep /.rar// >>listadorar.txt
pause
dir /B listadozip.txt listadorar.txt > lista.txt
rem del listadozip.txt
rem del listadorar.txt
FOR /F "tokens=1 delims=" %%a in (lista.txt) do call comprobar.bat "%%a"

el comprobar .bat

echo off
if %~z1 GTR 0 call zsaca.bat

Actualemente funciona pero me gustaría poder hacerlo en un solo .bat

¿Es posible o lo tengo que dejar así?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:comprobar si archivo vacío

Publicado por Armando Nava  (194 intervenciones) el 25/04/2009 08:30:54
Saludos.

Yo también tenía este mismo problema, cada comprobación era igual a un archivo extra, no es tan malo si solo son unos cuantos, pero se incrementan es dificil darle mantenimiento al BAT.

Cuando usas el FOR, dentro del DO puedes hacer muchas cosas.

FOR /F "tokens=1 delims=" %%a in (lista.txt) do (
ECHO -----------------
ECHO %%a
ECHO ------------------
if %%~za GTR 0 call zsaca.bat
)

Segun la ayuda lo mismo aplica al IF, pero no he implementado algo así:

La cláusula ELSE debe aparecer en la misma línea que la del comando que
sigue al IF Por ejemplo:

IF EXIST archivo. (
del archivo.
) ELSE (
echo archivo. no existente.
)

Lo siguiente NO funcionará porque el comando DEL debe terminarse con una
nueva línea:

IF EXIST archivo. del archivo. ELSE echo archivo. no existente

Tampoco funcionará lo siguiente, ya que el comando ELSE debe estar en la
misma línea del comando IF:

IF EXIST archivo. del archivo.
ELSE echo archivo. no existente

Si desea tenerlo todo en una misma línea, lo siguiente funcionaría:

IF EXIST archivo. (del archivo.) ELSE echo archivo. no existente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:comprobar si archivo vacío

Publicado por Enrique (2 intervenciones) el 27/04/2009 09:28:26
gracias por la ayuda pero mi problema realmente es que el archivo si existe siempre, el archivo se crea pero con tamaño 0, tendría que realizar una comprobación de su tamaño, para así poder ir a un lugar u otro del código.

este es el zsaca el cual quiero utilizar como si fuera el main

del listadozip.txt
del listadorar.txt

sfk145 list . .zip +filter -rep /.zip// >>listadozip.txt
sfk145 list . .rar +filter -rep /.rar// >>listadorar.txt

rem esto tendria q ir en otro .bat al q solo llame si listadozip es != 0

"c:program fileswinrarwinrar.exe" e -ad *.zip
sfk145 list . .zip +filter -rep /.zip// >>listado.txt
sfk145 list . .* +filter -+ >>listado3.txt
sfk145 filter listado3.txt -rep //_/ >>listado2.txt
del *.zip
call mi_java
sfk145 filter prueba.txt +run "$file" -yes
del listado2.txt
del listado3.txt
del prueba.txt
sfk145 filter listado.txt +run "rmdir /S /Q $file" -yes
del listado.txt

rem esto tendría q ir en otro archivo.bat al que sólo llamaría si listadorar != 0

"c:program fileswinrarwinrar.exe" e -ad *.rar
sfk145 list . .rar +filter -rep /.rar// >>listado.txt
sfk145 list . .* +filter -+ >>listado3.txt
sfk145 filter listado3.txt -rep //_/ >>listado2.txt
del *.rar
call mi_java
sfk145 filter prueba.txt +run "$file" -yes
del listado3.txt
del listado2.txt
del prueba.txt
sfk145 filter listado.txt +run "rmdir /S /Q $file" -yes
del listado.txt

sfk145 list . .zip +filter -rep /.zip// >>listadozip.txt
sfk145 list . .rar +filter -rep /.rar// >>listadorar.txt

dir /B listadozip.txt listadorar.txt > lista.txt
rem del listadozip.txt
rem del listadorar.txt
FOR /F "tokens=1 delims=" %%a in (lista.txt) do call comprobar.bat "%%a"

el comprobar es este

if %~z1 GTR 0 call zsaca.bat

como puedo hacer las comprobaciones que tengo comentadas de tal manera que pueda volver a esa parte del cñodigo luego y no empezar la ejecución del zsaca.bat desde el principio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:comprobar si archivo vacío

Publicado por amparitohijo (94 intervenciones) el 28/04/2009 11:10:15
Buenas.

No se si he entendido muy bien qué es lo que quieres hacer. Tengo un script desde hace tiempo que detecta los archivos vacíos y ejecuta una acción u otra en función de si contienen datos o no. Te lo paso para que le eches un vistazo. Sólo funciona cuando el archivo se llama igual siempre. Si te vale, comenta. Si no, pues también.
Saludos.

NOTAS: El archivo que tiene que detectar el tamaño es "archivo.txt" en C:\Pruebas. Deberás cambiar el path y el nombre de archivo, así como las acciones a tomar en un caso o en otro.

@ECHO OFF
CD C:\Pruebas
ECHO ====== Inicio de batch ====== >> log.txt
(DATE /T & TIME /T) >> log.txt
IF EXIST archivo.txt (DIR archivo.txt > lista.tmp) ELSE (GOTO NoExiste)
FIND "archivo.txt" "lista.tmp" > lista2.tmp
DEL lista.tmp
FOR /f "SKIP=1 TOKENS=3,4 DELIMS= " %%a IN (lista2.tmp) DO (IF %%a GTR 0 (ECHO Archivo %%b = %%a bytes & GOTO ConDatos ) ELSE (ECHO Archivo %%b = %%a bytes & GOTO SinDatos)) >> log.txt

:NoExiste
ECHO El archivo "archivo.txt" no existe en el directorio especificado. Proceso Abortado >> log.txt
GOTO Final

:ConDatos
DEL lista2.tmp > nul
REM *** Escribe aquí el código que quieras que se ejecute en caso de que el archivo contenga datos.
GOTO Final

:SinDatos
DEL lista2.tmp > nul
REM *** Escribe aqui el codigo para cuando el archivo venga vacío.

:Final
REM *** Final comun a ambos desenlaces.
(DATE /T & TIME /T) >> log.txt
ECHO ====== Final de batch ====== >> log.txt
EXIT
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:comprobar si archivo vacío

Publicado por Armando Nava  (194 intervenciones) el 03/05/2009 08:01:37
Pues........

Es la misma gata revolcada, utiliza la estructura del comprobar de la siguiente manera:

Solo hay que usar listadozip.txt y listadorar.txt refiriendonos a esos archivos y no a su contenido.


FOR /F %%a in ('DIR /B listadozip.txt ') do (
ECHO %%a tiene tama %%~za
ECHO ------------------
if %%~za NEQ 0 call listadoZIP_noigual_cero.bat
REM --De aqui brincas a la parte que quieras
GOTO algunaPARTE
)

FOR /F %%a in ('DIR /B listadorar.txt ') do (
ECHO %%a tiene tama %%~za
ECHO ------------------
if %%~za NEQ 0 call RAR_dif__d_cero.bat
REM --De aqui brincas a la parte que quieras
GOTO algunaPARTE
)

De seguro te sirve y si no nos avisas...............
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar