Encuentre archivos de cero bytes con comodines y verifique si el archivo BATCH principal ya está abierto

Necesito encontrar en una carpeta específica si existe un archivo con cero bytes que tenga la extensión *.ff0. El siguiente script no funciona porque siempre recibo el mensaje "el archivo no está vacío". ¿Lo que está mal?

@echo off
set out="C:\test_files\*.ff0"

if "%out%" == "" ( 
  echo File does not exist.
) else if "%out%" == "0" (
   echo File is empty.
) else (
   echo File is non-empty.
) 

La segunda pregunta es que mi archivo por lotes se ubicará más adelante en algún lugar de una carpeta de la intranet, lo que significa que es posible que otras personas también tengan acceso.
Por lo tanto, cuál debería ser el código completo para hacer lo siguiente:

1-Identificar si existe una instancia abierta del archivo.
2-Si lo hay, avisar al usuario de que alguien ya lo está usando y, en cuanto se cierre, otros usuarios podrán abrirlo

preguntado el 04 de julio de 12 a las 07:07

No está claro lo que está preguntando en la segunda parte de su pregunta. Si se trata de detener a más de una persona que ejecuta el archivo por lotes a la vez, un enfoque común es hacer que el archivo por lotes verifique la presencia de un archivo por lotes. .lock archivo, creándolo si no está allí, o errándolo, luego limpiando el archivo de bloqueo cuando sale el archivo por lotes. Pero no está claro si eso es realmente lo que quieres... -

Gracias ! El candado reemplazó este script, pero fue bueno aprenderlo de todos modos. Vea el script de bloqueo hecho por nuestro colega dbenham en el enlace stackoverflow.com/questions/11619416/… -

2 Respuestas

Lo mejor es hacerlo así:

@echo off
for %%a in (c:\test_files\*.ff0) do (
  if %%~za equ 0 (
    echo %%~na is empty
  ) else (
    echo %%~na is not empty
  )
)

Respondido 09 Jul 12, 16:07

Esto hará la primera parte de su pregunta. Esto pasará por todos los .ff0 archivos en la carpeta y para cada uno le dirá si está vacío o no. Simplemente reemplace o agregue debajo del echo Empty comando para hacer lo que quiere hacer con el archivo.

@echo off
setlocal enabledelayedexpansion
for /r C:\test_files %%i in (*.ff0) do (
set size=%%~zi
if !size! gtr 0 (
echo Not empty
) else (
echo Empty!
)
)
pause >nul

Con respecto a verificar si el archivo está abierto, no creo que pueda hacerlo por lotes. Ni siquiera creo que haya una forma confiable de hacer esto en otros lenguajes de programación adecuados que no sea intentar detectar el error.

Espero que esto ayude.

Respondido 04 Jul 12, 10:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.