windows - 用于从网络驱动器中删除文件的批处理文件命令
问题描述
我正在尝试定期从共享驱动器中删除应用程序日志,
ForFiles /p "\\netapp-1\Transfers\Logs\QA" /s /d -15 /c "cmd /c del @file"
当路径是我的本地驱动器时,上述命令有效,但不适用于共享驱动器,任何帮助将不胜感激。
干杯!
解决方案
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
命令无法映射网络路径或无法将目录切换到该路径。
所以认真对待。
推荐阅读
- android - 当 flowable 发射时从单个发射
- artifactory - 无法使用 JFrog Artifactory REST API 获取加密密码。
- javascript - Typescript:如何用布尔值或回调函数定义联合类型?
- android - 无法将图像从 ImageView 上传到 Android 中的 FireBase 存储
- cordova-plugins - Branch.io 深层链接在 Cordova 上总是返回空
- validation - Xpages - SSJS 验证,CSJS onComplete
- groovy - 省略命名参数的括号会颠倒顺序
- r - R - 巨大data.frame中的变异条件
- kubernetes - 无法在 Google Kubernetes Engine 上部署 Kubernetes 联合
- node.js - 如何在不手动登录 aws 控制台的情况下启动/停止我的 lightsail 实例?