
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 %%~zF
GTRNEQ0 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 NonEmptyFile
etiqueta 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 %~1
en 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 (*) DO
recorre cada archivoIF %%~zF GTR 0
si el tamaño del archivo es mayor que...CALL :NonEmptyFile "%%~F"
Llame a la:NonEmptyFile
etiqueta 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 for
funciona al for /?
ejecutarcmd