我想要捕获永久目录中存在的T日期(当前日期)文件。如果存在带有T日期的文件,则脚本工作正常。但如果没有T日期文件,则输出(文件数)为Volume。在那之后,如果这些文件的数量大于0,我会给出回显4的条件。即使在没有T个日期的文件之后,输出也是4。如果没有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 )我做错了什么?
发布于 2014-02-27 15:11:52
您正在解析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所有这些都应该生成相同的输出
https://stackoverflow.com/questions/22060845
复制相似问题