Ms-Dos - Ver si un TXT tiene 0 bytes y realizar una acción, sino hacer otra.

 
Vista:
sin imagen de perfil
Val: 17
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Ver si un TXT tiene 0 bytes y realizar una acción, sino hacer otra.

Publicado por Victor (7 intervenciones) el 23/07/2019 02:54:52
Buenas a todos,

Un programa me genera un archivo .txt, y dependiendo del proceso, me lo genera con "0 bytes" (cero bytes) o dentro del txt pone el número "0" una o dos veces, siendo el archivo mayor a cero bytes.

Quería algún .bat para que vea el tamaño del archivo y confirme si tiene "0 bytes" para hacer una acción, y si es mayor (ejm 1mb) ejecute otra acción.

Lo único que logré hacer es mostrarlo en pantalla:

1
forfiles /S /M *.txt /C "cmd /c if @fsize EQU 0 echo @path   archivo con cero bytes"

pero solo me lo muestra, yo quiero sacar un valor para que ejecute otra parte del bat (goto) o algo similar que me permita hacer una cosa u otra según el tamaño del archivo en cuestión.

Espero se me pueda entender, gracias de antemano.
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
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Ver si un TXT tiene 0 bytes y realizar una acción, sino hacer otra.

Publicado por Antoni Masana (811 intervenciones) el 23/07/2019 07:31:14
Te envío dos formas de comprobar el contenido del fichero:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off
echo popo >F1.txt
type nul  >F2.txt
type nul  >F0.tmp
: --- Opción 1
FC F0.tmp F1.txt >nul
IF %ErrorLevel% == 0 (echo F1.txt = Esta Vacio
              ) else (echo F1.txt = Tiene Datos
              )
FC F0.tmp F2.txt >nul
IF %ErrorLevel% == 0 (echo F2.txt = Esta Vacio
              ) else (echo F2.txt = Tiene Datos
              )
echo.
: --- Opción 2
FOR    %%a IN (F*.TXT) DO (
    IF %%~za EQU 0 echo %%a = Esta vacio
    IF %%~za GTR 0 echo %%a = Tiene Datos
    )
: --- Elimina ficheros
del F1.txt F2.txt F0.tmp

Resultado:

1
2
3
4
5
F1.txt = Tiene Datos
F2.txt = Esta Vacío
 
F1.txt = Tiene Datos
F2.txt = Esta Vacío

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 17
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Ver si un TXT tiene 0 bytes y realizar una acción, sino hacer otra.

Publicado por Victor (7 intervenciones) el 23/07/2019 12:54:03
Hola Antoni, interesante, pero lo que necesito es que, si encuentra algún TXT con cero bytes (por ejm) que abra la calculadora, y si encuentra un txt con mas de cero bytes que abra el block de notas (por ejm).

Sería algo como un
1
2
3
4
5
6
IF ...(encuentra un txt que tiene cero bytes).... GOTO ....(calculadora).... ELSE .....(notas).
 
:calculadora
open calc.exe
:notas
open notepad.exe

No se si se podrá de esa manera, de todas formas muchas gracias por tu tiempo.
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
sin imagen de perfil
Val: 17
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Ver si un TXT tiene 0 bytes y realizar una acción, sino hacer otra.

Publicado por Victor (7 intervenciones) el 23/07/2019 13:23:51
Añadir también que, no me sé los nombres de los archivos, solo que son TXT, deberá aplicarse a uno o varios TXT.
Si encuentra siquiera uno con cero bytes que ejecute una acción, si no encuentra ninguno entonces otra acción.
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
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Ver si un TXT tiene 0 bytes y realizar una acción, sino hacer otra.

Publicado por Antoni Masana (811 intervenciones) el 23/07/2019 13:33:16
Con el START el bat continua ejecutándose después de abrir el programa (Calc o NotePad).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off
echo popo >F1.txt
type nul  >F2.txt
type nul  >F0.tmp
: --- Opción 1
FC F0.tmp F1.txt >nul
IF %ErrorLevel% == 0 (Start Calc
              ) else (Start NotePad F1.txt
              )
FC F0.tmp F2.txt >nul
IF %ErrorLevel% == 0 (Start Calc
              ) else (Start NotePad F2.txt
              )
echo.
: --- Opción 2
FOR    %%a IN (F*.TXT) DO (
    IF %%~za EQU 0 Start Calc
    IF %%~za GTR 0 Start NotePad %%a
    )
: --- Elimina ficheros
del F1.txt F2.txt F0.tmp


Si le quitas el START el BAT se espera a que cierres el programa para continuar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
echo off
echo popo >F1.txt
type nul  >F2.txt
type nul  >F0.tmp
: --- Opción 1
FC F0.tmp F1.txt >nul
IF %ErrorLevel% == 0 ( Calc
              ) else ( NotePad F1.txt
              )
FC F0.tmp F2.txt >nul
IF %ErrorLevel% == 0 ( Calc
              ) else ( NotePad F2.txt
              )
echo.
: --- Opción 2
FOR    %%a IN (F*.TXT) DO (
    IF %%~za EQU 0  Calc
    IF %%~za GTR 0  NotePad %%a
    )
: --- Elimina ficheros
del F1.txt F2.txt F0.tmp


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Ver si un TXT tiene 0 bytes y realizar una acción, sino hacer otra.

Publicado por Antoni Masana (811 intervenciones) el 23/07/2019 15:35:20
¿Es esto lo que quieres?

1
2
3
4
5
6
7
8
9
@echo off
set Vacio=0
FOR    %%a IN (*.TXT) DO IF %%~za GTR 0 set Vacio=1
 
IF %Vacio% EQU 0 (
   echo Todos los ficheros .TXT estan vacios.
) else (
   echo Hay al menos un fichero .TXT con datos
)

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Ver si un TXT tiene 0 bytes y realizar una acción, sino hacer otra.

Publicado por Antoni Masana (811 intervenciones) el 23/07/2019 16:05:48
En el BAT anterior hace:

Si todos los ficheros TXT están vacíos hace la opción 1 y si hay algún fichero con datos hace la opción 2

Pero releyendo el anunciado creo que lo que buscas es esto:

1
2
3
4
5
6
7
8
9
@echo off
set Vacio=0
FOR    %%a IN (*.TXT) DO IF %%~za EQU 0 set Vacio=1
 
IF %Vacio% EQU 1 (
   echo Hay al menos un fichero .TXT esta vacio.
) else (
   echo Todos los ficheros .TXT tienes datos.
)

Si todos los ficheros TXT tienen datos hace la opción 2 y si hay algún fichero vacío hace la opción 1

Si me equivoco explícamelo porque me he perdido.


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 17
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Ver si un TXT tiene 0 bytes y realizar una acción, sino hacer otra.

Publicado por Victor (7 intervenciones) el 23/07/2019 16:55:22
El que sabe, sabe. Muchas gracias Antoni, ahora si que lo tengo, gracias a tu ayuda.
Lo del "Start" no lo sabia, me ayudó mucho en lo que estoy haciendo.

Una última pregunta
¿Como puedo, lanzar desde un bat un chkdsk a la propia unidad que se esta ejecutando el bat? (en este caso es un pedndrive)
Puede ser en la misma ventana, o en otra emergente (sin el start)

Lo he intentado, pero solo me aparece el CMD, pero no realiza el checkdisk.

Saludos.
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
sin imagen de perfil
Val: 17
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Ver si un TXT tiene 0 bytes y realizar una acción, sino hacer otra.

Publicado por Victor (7 intervenciones) el 23/07/2019 19:38:22
Bueno, parece que tenemos algo mas,

1
start cmd.exe /c chkdsk /F/X

´Creo que ya lo tengo, ahora probaré todo en conjunto, muchas gracias.
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
sin imagen de perfil
Val: 17
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Ver si un TXT tiene 0 bytes y realizar una acción, sino hacer otra.

Publicado por Victor (7 intervenciones) el 23/07/2019 20:40:01
Después de pasar el CHKDSK, ante el resultado en pantalla de, ¿Convertir cadenas perdidas en archivos (S/N)?
Como puedo marcar S por defecto? (sin tener que pulsar la tecla S)
El volumen es FAT32
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
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Ver si un TXT tiene 0 bytes y realizar una acción, sino hacer otra.

Publicado por Antoni Masana (811 intervenciones) el 23/07/2019 21:37:07
Esto podría funcionar si hace UNA pregunta, si hay más tendrás un problema, yo no lo usaría porque no sabes que es lo que puede preguntar y no hay una opción para que tome valores por defecto.

1
start cmd.exe /c "echo S | chkdsk /F /X"

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 17
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Ver si un TXT tiene 0 bytes y realizar una acción, sino hacer otra.

Publicado por Victor (7 intervenciones) el 27/07/2019 04:15:57
Nuevamente muchisimas gracias,
me sirvió mucho el:

1
2
3
4
5
6
7
8
set Vacio=0
FOR    %%a IN (*.TXT) DO IF %%~za EQU 0 set Vacio=1
 
IF %Vacio% EQU 1 (
   echo Hay al menos un fichero .TXT esta vacio.
) else (
   echo Todos los ficheros .TXT tienes datos.
)

Ya que había puesto otra cosa con temporales que se borraban comparando y demas, con eso es mucho mas directo.
también lo del :

1
start cmd.exe /c "echo S | chkdsk /F /X"

Funciona a la perfección.
Mil gracias Antoni, eres un crack.
De verdad, mil gracias.
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