我正试图定期从共享驱动器中删除应用程序日志,
ForFiles /p "\\netapp-1\Transfers\Logs\QA" /s /d -15 /c "cmd /c del @file"
上面的命令在路径是我的本地驱动器时有效,但对于共享驱动器不起作用,将非常感谢您的帮助。
干杯!
答案 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
命令无法映射网络路径或无法将目录切换到该路径,它可以防止当前目录中的文件被意外删除。
所以请认真对待。