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

标签 windows batch-file cmd unc

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

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/

相关文章:

windows - 您可以使用 MSDN 操作系统订阅在 Azure 上运行 Windows 客户端 VM 吗?

c++ - 是否可以在 CEdit 控件的纯数字输入模式和字母数字输入模式之间切换?

Windows 在文件的特定行号上添加新行

batch-file - 为什么我会收到此错误? - "The syntax of the command is incorrect."

windows - 在嵌套批处理文件中设置环境变量

c++ - 在不使用 __fastcall 的情况下 Hook __thiscall

windows - 为什么批处理文件中的命令 "Timeout"突然不起作用了?

cmd - 查找当前文件夹的路径 - cmd

python - 为什么 sys.exit() 导致回溯?

将返回操作系统的短日期格式的 Windows 命令