我正在尝试找出一种方法,让批处理脚本覆盖特定目录及其子文件夹中非零字节文件的每个实例。我猜想,由于我正在寻找非零文件,如果它找不到任何非零大小的文件,我可能会用转义符循环它?
例如,覆盖 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 在(*** 见下文) 如果 %%~zF 则执行
超级贸易国家质量监督检验中心0 调用:NonEmptyFile "%%~F"
GOTO:EOF:NonEmptyFile
ECHO 得到非空文件:%1
呼叫 :EOF
*** 用您想要替换的文件名替换,确保在某处使用单个字符通配符(我在扩展中使用它 - 例如,如果我正在搜索 example.txt,我将 * 替换为 example.t?t)
答案1
遍历给定路径和所有子文件和子路径的最小批次,调用NonEmptyFile
每个非空文件的标签。
@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
%~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