我正在尝试定期从共享驱动器中删除应用程序日志,
ForFiles /p "\\netapp-1\Transfers\Logs\QA" /s /d -15 /c "cmd /c del @file"
当路径是我的本地驱动器时,上述命令有效,但它不适用于共享驱动器,我们将不胜感激任何帮助。
干杯!
最佳答案
ForFiles.exe
不支持 UNC 路径作为开始搜索的起始目录,因此您必须临时映射一个 <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)
在批处理文件中,上面的内容可以写成多行以提高可读性
pushd "\\netapp-1\Transfers\Logs\QA" && (
ForFiles /s /d -15 /c "cmd /c if @isdir==FALSE del @path"
popd
)
而且您的 ForFiles
中有两个缺陷我在评论区提供初步解决方案时没有注意的命令示例,已被aschipfl解决在评论中:
if @isdir==FALSE
应将目录排除在外不要将它们传递给del
命令@path
应使用变量而不是@file
, 将完全限定路径传递给del
命令否则无法删除子目录中的文件。
重要提示:
注意条件运算符的用法 - 双 & 符号 &&
(不同于单个 &
- 命令分隔符)在 pushd
之后命令。它保证ForFiles
(和 popd
)将被执行 If and only If,之前的 pushd
命令成功。
它保护当前目录中的文件不被意外删除,以防pushd
。命令无法映射网络路径或无法将目录切换到该路径。
所以认真对待吧。
关于windows - 用于从网络驱动器中删除文件的批处理文件命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51589276/