我试图找出一种方法让批处理脚本覆盖特定目录及其子文件夹中非零字节文件的每个实例。我猜,因为我正在寻找一个非零文件,如果它找不到任何非零大小的文件,我可能会用转义符循环它?
例如,覆盖每个非零文件大小的 example.txt 实例:
D:\
\---SubFolder1
| example.txt <10 bytes>
|
\---Subfolder2
| example.txt <0 bytes>
|
\---Subsubfolder1
example.txt <20 bytes>
在示例中,D:\Subfolder1\example.txt 和 D:\Subfolder2\Subsubfolder1\example.txt 将被覆盖,但 D:\Subfolder2\example.txt 不会更改。
感谢@NiKiZe 的所有帮助!
工作代码:
@ECHO 关闭
设置 DPATH=%~dp0
FOR /R "%DPATH%" %%F IN ( *** 见下文) 如果 %%~zF
GTRNEQ 0 CALL :NonEmptyFile "%%~F"
GOTO :EOF:NonEmptyFile
ECHO 得到非空文件: %1
呼叫:EOF
*** 替换为您要替换的文件名,确保在某处使用单个字符通配符(我在扩展名中使用了它 - 例如,如果我正在搜索 example.txt,我将 * 替换为 example.t ?t)
遍历给定路径和所有子文件和子路径的最小批次,
NonEmptyFile
为每个非空文件调用标签。通过
%~1
在函数中使用,它将被扩展,您可以使用诸如COPY /Y "somefile.txt" "%~1"
未指定如何覆盖文件之类的内容。创建“空文件”的另一个选项是
ECHO. > "%~1"
解释:
FOR /R "%DPATH%" %%F IN (*) DO
遍历每个文件IF %%~zF GTR 0
如果文件大小大于...CALL :NonEmptyFile "%%~F"
:NonEmptyFile
使用转义的文件名调用标签要在提示时进行测试,请使用
FOR /R "D:\SubFolder1\" %F IN (*) DO IF %~zF GTR 0 ECHO NonEmptyFile "%~F"
for
通过运行提供有关如何工作的for /?
更多信息cmd