我想捕获特定目录中存在的T日期(当前日期)文件。如果有T日期的文件,脚本工作正常。但如果没有T日期文件,则输出(文件数)为Volume。如果这些文件的计数大于0,我将条件作为回显4。此输出也是4,即使没有T日期文件。 如果没有T日期文件,那么我需要3作为输出。 我的问题是
@echo off
SetLocal enabledelayedexpansion
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set year=%%c
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set month=%%a
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do set day=%%b
set TODAY=%day%%month%%year%
echo %TODAY%
for /F "tokens=1" %%a IN ('Dir "C:\Users\sbarapatre\Desktop\CBS\OUTBOX\*%TODAY%*" /-C/S/A:-D
2^>nul') Do Set y=!n2! & Set n2=%%a
echo out %y%
If %y% gtr 1 ( echo 4 ) else ( echo 3 )
我做错了什么?
答案 0 :(得分:0)
您正在解析dir输出中的行,获取错误的行并保存错误的变量。您正在搜索的行(最终文件计数)以空格开头,后跟一个不以0开头的数字(如果找到任何文件)。这个条件不在发布的代码中。
@echo off
SetLocal enabledelayedexpansion
for /f "tokens=2-4 delims=/ " %%a in ('date /T') do (
set "year=%%c"
set "month=%%a"
set "day=%%b"
)
set "TODAY=%day%%month%%year%"
echo %TODAY%
set "folder=C:\Users\sbarapatre\Desktop\CBS\OUTBOX"
set "nFiles=0"
for /F %%a IN (
'dir /-c /s /a-d "%folder%\*%TODAY%*" 2>nul ^| findstr /r /b /c:" [ ]*[1-9]"'
) do "nFiles=%%a"
If %nFiles% gtr 0 ( echo 4 ) else ( echo 3 )
但是没有必要解析dir命令的输出。只计算返回行数
for /F %%a IN (
'dir /b /s /a-d "%folder%\*%TODAY%*" 2>nul ^| find /v /c ""'
) do "nFiles=%%a"
If %nFiles% gtr 0 ( echo 4 ) else ( echo 3 )
即使for
也没有必要。如果只需要知道数字是否大于0,也就是说,如果有文件,那么只需检查是否生成了任何行
dir /b /s /a-d "%folder%\*%TODAY%*" 2>nul | find /v "" > nul
if errorlevel 1 ( echo 3 ) else ( echo 4 )
或直接如果dir命令找到任何文件
dir /b /s /a-d "%folder%\*%TODAY%*" >nul 2>nul && echo 4 || echo 3
所有人都应该生成相同的输出