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

时间:2018-07-30 07:50:08

标签: windows batch-file cmd unc

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

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

上面的命令在路径是我的本地驱动器时有效,但对于共享驱动器不起作用,将非常感谢您的帮助。

干杯!

1 个答案:

答案 0 :(得分:3)

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)将被执行,如果且仅当,则先前的pushd命令将成功执行。

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