需要搜索T日期文件,但如果不存在T日期文件,则将音量作为输出

时间:2014-02-27 06:37:08

标签: windows batch-file batch-processing

我想捕获特定目录中存在的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 )

我做错了什么?

1 个答案:

答案 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

所有人都应该生成相同的输出