Batch脚本dir /b输出包含目录名及加/A-D参数运行报错问题
问题原因解答
1. 原脚本输出包含FULL目录名的原因
- FORFILES命令默认同时匹配文件和目录,你新增的FULL、DIFF、LOG三个子目录中,只有FULL目录的最后修改时间早于8天前,另外两个目录的修改时间在8天以内,因此只有FULL目录被
/d -8参数筛选命中。 - 原脚本中
dir /B @file没有过滤目录的参数,命中FULL目录时dir会直接输出目录名,所以最终输出中会出现FULL。
2. 修改后脚本出现File Not Found报错的原因
- 你新增的
/A-D参数要求dir只输出文件,但FORFILES仍然会先命中符合时间条件的目录,对命中的目录执行dir /A-D 目录名时,系统无法找到同名的文件,就会抛出File Not Found错误。出现两次报错说明FORFILES一共匹配到了2个修改时间超过8天的目录。
优化建议
直接使用FORFILES自带的参数过滤文件,不需要嵌套dir命令,修改为如下写法即可同时避免输出目录和报错:
PUSHD \\SERVER_NAME\M$\MSSQL :: /A:-D 表示只匹配文件,排除目录 FORFILES /P Backup /s /A:-D /d -8 /C "cmd /c echo @file">K:\ScriptLogs\OutPut POPD
内容的提问来源于stack exchange,提问作者Kris。
相关产品推荐
相关产品推荐

