在批处理文件中计算文件夹中的文件不能按预期工作
我在计算批处理文件中特定文件夹中的文件时遇到问题。 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问题但它仍然不起作用。 我在做什么错?我是否需要更改其他设置?
我尝试了一下,似乎必须准确地指定想要的文件。我改变了我的日志文件夹的路径从
SET LOGS_LOCAL=C:\Backups\weekly\logs
到
SET LOGS_LOCAL=C:\Backups\weekly\logs\*.log
现在,我的批处理文件返回 “7” COUNT
。
这是正确的答案。如果没有'\ *。log' for会匹配日志文件夹而不是包含的文件。 –
是的。如果你真的阅读了FOR命令的帮助文件。 '(set)指定一组一个或多个文件。可能会使用通配符。' – Squashman
只是向你展示一个不同的方式:
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 ""
=每个非空行)
您正在显示一个替代方案,最复杂,但没有解决实际问题。 –
@LS_ᴅᴇᴠ:皮特已经找到了解决办法(见时间戳),所以我没有理由重复它。 – Stephan
你是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
您不必在此代码延迟扩展。 –