从网络驱动器中删除文件的批处理文件命令

Kin*_*her 1 windows cmd unc batch-file

我正在尝试定期从共享驱动器中删除应用程序日志,

ForFiles /p "\\netapp-1\Transfers\Logs\QA" /s /d -15 /c "cmd /c del @file"
Run Code Online (Sandbox Code Playgroud)

当路径是我的本地驱动器时,上述命令有效,但不适用于共享驱动器,任何帮助将不胜感激。

干杯!

sst*_*sst 5

ForFiles.exe不支持 UNC 路径作为开始搜索的起始目录,因此您必须临时将 a 映射<Drive Letter>:到网络路径。

最方便的方法是使用pushd/popd命令对自动执行 MAP/UNMAP,而无需考虑当前可用于映射的驱动器号。

pushd "\\netapp-1\Transfers\Logs\QA" && (ForFiles /s /d -15 /c "cmd /c if @isdir==FALSE del @path" & popd)
Run Code Online (Sandbox Code Playgroud)

在批处理文件中,以上可以写成多行以获得更好的可读性

pushd "\\netapp-1\Transfers\Logs\QA" && (
    ForFiles /s /d -15 /c "cmd /c if @isdir==FALSE del @path"
    popd
)
Run Code Online (Sandbox Code Playgroud)

而且你的ForFiles命令示例中有两个缺陷是我在评论部分提供初步解决方案时没有注意的,aschipfl在评论中已经解决了这个问题:

  • 目录应该被排除在处理之外if @isdir==FALSE,不要将它们传递给del命令

  • @path变量应该被用来代替@file,通过完全合格的路径的del命令,否则不能将文件中的子目录删除它们。


重要的提示:

请注意在命令后使用条件运算符 - 双与号&&(与单&命令分隔符不同)pushd。它保证ForFiles(和popd)将被执行,如果且仅当,先前的pushd命令成功。

它可以保护当前目录中的文件不被意外删除,以防pushd命令无法映射网络路径或无法将目录切换到该路径。
所以要认真对待。