首页 > 解决方案 > 用于从网络驱动器中删除文件的批处理文件命令

问题描述

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

ForFiles /p "\\netapp-1\Transfers\Logs\QA" /s /d -15 /c "cmd /c del @file"

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

干杯!

标签: windowsbatch-filecmdunc

解决方案


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)

在批处理文件中,以上内容可以写成多行以提高可读性

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(and popd) 将被执行当且仅 If,先前的pushd命令是成功的。

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


推荐阅读