Código de trabajo:

Código de trabajo:

Estoy tratando de encontrar una manera de que un script por lotes sobrescriba cada instancia de un archivo de bytes distinto de cero dentro de un directorio específico y sus subcarpetas. Supongo que, dado que estoy buscando un archivo distinto de cero, probablemente podría realizar un bucle con un escape si no encuentra ningún archivo de tamaño distinto de cero.

Ejemplo, sobrescriba cada instancia de ejemplo.txt donde sea un tamaño de archivo distinto de cero:

D:\
\---SubFolder1
    |   example.txt <10 bytes>
    |
    \---Subfolder2
        |   example.txt <0 bytes>
        |
        \---Subsubfolder1
                example.txt <20 bytes>

En el ejemplo, D:\Subcarpeta1\ejemplo.txt y D:\Subcarpeta2\Subsubcarpeta1\ejemplo.txt se sobrescribirían, pero D:\Subcarpeta2\ejemplo.txt no se cambiaría.

¡Gracias a @NiKiZe por toda tu ayuda!

Código de trabajo:

@ECO APAGADO

ESTABLECER DPATH=%~dp0

PARA /R "%DPATH%" %%F EN (*** VEA ABAJO) HACER SI %%~zFGTR NEQ0 LLAMADA :NonEmptyFile "%%~F"
GOTO :EOF

:NonEmptyFile
ECHO Obtuve un archivo no vacío: %1
LLAMADA :EOF

*** Reemplace con el nombre del archivo que desea reemplazar, asegúrese de usar un comodín de un solo carácter en alguna parte (lo usé en la extensión; por ejemplo, si estoy buscando ejemplo.txt, reemplacé el * con ejemplo.t ?t)

Respuesta1

Lote mínimo que recorre una ruta determinada y todos los subarchivos y subrutas, llamando a la NonEmptyFileetiqueta para cada archivo que no esté vacío.

@ECHO OFF

SET DPATH=%~dp0

FOR /R "%DPATH%" %%F IN (*) DO IF %%~zF GTR 0 CALL :NonEmptyFile "%%~F"
GOTO :EOF

:NonEmptyFile
  ECHO Got non empty file: %1
CALL :EOF

Al usarlo %~1en la función, se expandirá y podrá usar algo como COPY /Y "somefile.txt" "%~1" No se especificó cómo desea sobrescribir los archivos.

Otra opción para crear "archivos vacíos" esECHO. > "%~1"

Explicación:

  • FOR /R "%DPATH%" %%F IN (*) DOrecorre cada archivo
  • IF %%~zF GTR 0si el tamaño del archivo es mayor que...
  • CALL :NonEmptyFile "%%~F"Llame a la :NonEmptyFileetiqueta con el nombre del archivo escapado

Para probar esto cuando se le solicite, utiliceFOR /R "D:\SubFolder1\" %F IN (*) DO IF %~zF GTR 0 ECHO NonEmptyFile "%~F"

Se proporciona más información sobre cómo forfunciona al for /?ejecutarcmd

información relacionada