2017-10-11 48 views
0

我在计算批处理文件中特定文件夹中的文件时遇到问题。 C:\ logs中的我的文件夹包含七个不同的日志文件。在批处理文件中计算文件夹中的文件不能按预期工作

当我运行一个包含以下内容的批处理文件,我一直都想与“1”作为价值COUNT

SETLOCAL ENABLEDELAYEDEXPANSION 

SET LOGS_LOCAL=C:\logs 

SET COUNT=0 

REM Count logs 
for %%A in ("%LOGS_LOCAL%") do set /a COUNT+=1 

echo !COUNT! 
pause 

正如你可以看到我用了一个答案的片段从this问题但它仍然不起作用。 我在做什么错?我是否需要更改其他设置?

+2

您不必在此代码延迟扩展。 –

回答

2

我尝试了一下,似乎必须准确地指定想要的文件。我改变了我的日志文件夹的路径从

SET LOGS_LOCAL=C:\Backups\weekly\logs 

SET LOGS_LOCAL=C:\Backups\weekly\logs\*.log 

现在,我的批处理文件返回 “7” COUNT

+1

这是正确的答案。如果没有'\ *。log' for会匹配日志文件夹而不是包含的文件。 –

+0

是的。如果你真的阅读了FOR命令的帮助文件。 '(set)指定一组一个或多个文件。可能会使用通配符。' – Squashman

2

只是向你展示一个不同的方式:

for /f %%a in ('dir /b /a-d ^|find /c /v ""') do set count=%%a 
echo %count% 

dir参数:
/b使用简单的格式(仅限于姓名,没有总结,没有头)
/a-d排除的文件夹(演示文件只)

find /c /v ""然后只计算条目(/c = count,/v "" =每个非空行)

+1

您正在显示一个替代方案,最复杂,但没有解决实际问题。 –

+1

@LS_ᴅᴇᴠ:皮特已经找到了解决办法(见时间戳),所以我没有理由重复它。 – Stephan

0

你是SET ting 1单个目录,C:\logs,作为你的变量,LOGS_LOCAL,所以COUNT正常工作,其输出结果为1

我想什么你打算做这样该目录中的文件数:

@ECHO OFF 

SET "LOGS_LOCAL=C:\logs" 

SET "COUNT=0" 
REM Count logs 
FOR %%A IN ("%LOGS_LOCAL%\*.log") DO SET/A COUNT+=1 

ECHO %COUNT% 
PAUSE 
相关问题