【问题标题】:How to get accurate file count using batch (windows xp)?如何使用批处理(Windows XP)获得准确的文件计数?
【发布时间】:2013-04-25 03:15:03
【问题描述】:
浏览了类似的问题并卡在我的脚本上。
基本上,我需要这个 .bat 来检查目录中带有 Lockbox 前缀的文件的数量,将计数存储到一个变量中,并最终调用一个 .exe 来导入每个文件。
这是我目前所拥有的。我的问题是test目录一共有12个txt文件,但我只需要带Lockbox前缀的(其中11个):
@echo off
set count=0
for %%a in ('dir /a-d /a-h /a-s "\\ip_of_server\Directory\LockBox*.txt"') do set /a count+=1
@echo File count = %count%
pause
【问题讨论】:
标签:
batch-file
windows-xp-sp3
【解决方案1】:
我会非常小心 - 仔细查看您的 COUNT。如果您有 11 个通过属性测试的 LOCKBOX*.txt 文件,那么您的代码的响应应该是 4。
您拥有的代码应该生成 4,因为您/已经从 FOR 中省略了 /f,因此它会评估 'dir、a/d ... 并跳过双引号项(我已经不知道为什么它会跳过双引号)。
如果你使用FOR /F 代替它,你会得到16,因为dir 命令的输出包括5 个非空行——3 个在标题中,2 个在摘要中。
如果你尝试
for /f %%a in ('dir /B /a-d /a-h /a-s "\\ip_of_server\Directory\LockBox*.txt"') do set /a count+=1&echo %%a
那么你的计数应该是正确的,你也会得到显示的文件名。
如果你只想要计数,你也可以试试
for /f %%a in ('dir /a-d /a-h /a-s "\\ip_of_server\Directory\LockBox*.txt"^|find "File(s)"') do set count=%%a
【解决方案2】:
如果您不想显示目录和子目录,则无需使用“dir”命令,因为 FOR 不会包含它们。但是,如果它们以 LockBox 开头,它可能会包含任何隐藏文件。只需将第 5 行更改为(如果路径中有空格,您可能需要使用括号):
for %%a in (\\ip_of_server\Directory\LockBox*.txt) do set /a count+=1