Windows批处理:比较时间和string文字

我编写了一个批处理脚本, 如果某个目录中的文件名与预期的文件名在给定的时间范围内相同,那么该脚本将运行.exe

例如,path中的文件是“file1”和“file2”,而process_one =“file1”和process_two =“file2”

结果是,即使条件为假,它总是会转到第一个if语句。

在这里不工作的是if语句。 例如file1 =“filenameA.txt”; process_one =“filenmameB.txt”

它总是在第一个if语句中执行命令,即使它是假的。

我有没有比较正确的时间和string文字? 如果没有,那么时间和string文字的适当比较是什么?

这是我迄今为止所做的。 我在这里很新,所以谢谢你的所有见解。 🙂

@echo off For /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set MyDate=%%x SET EnabledDelayedExpansion SET folderPath=D:\InputFiles SET month=%MyDate:~4,2% SET day=%MyDate:~6,2% SET year=%MyDate:~0,4% SET dateToday=%year%%month%%day% SET currentTime=%Time: =0% SET filename1=filename1_%dateToday%.dat SET filename2=filename2_%dateToday%.dat SET filename3=filename3_%dateToday%.dat SET filename4=filename4_%dateToday%.dat SET filename5=filename5_%dateToday%.dat SET filename6=filename6_%dateToday%.dat ::SET count=0 pushd "%folderPath%" for %%F in (*.*) do ( ::set /a count+=1 ::echo %%~nxF IF "%%~nxF"=="%filename1%" ( IF %currentTime% GEQ 01:30:00.00 IF %currentTime% LEQ 23:00:00.00 ( start /b "" "C:\Program Files\Activity\activities.exe" -process acta ) ) IF "%%~nxF"=="%filename2%" ( IF %currentTime% GEQ 02:00:00.00 IF %currentTime% LEQ 18:05:59.59 ( start /b "" "C:\Program Files\Activity\activities.exe" -process actb ) ) IF "%%~nxF"=="%filename3%" ( IF %currentTime% GEQ 03:00:00.00 IF %currentTime% LEQ 19:00:00.00 ( start /b "" "C:\Program Files\Activity\activities.exe" -process actc ) ) IF "%%~nxF"=="%filename4%" ( IF %currentTime% GEQ 04:25:00.00 IF %currentTime% LEQ 19:00:00.00 ( start /b "" "C:\Program Files\Activity\activities.exe" -process actd ) ) IF "%%~nxF"=="%filename5%" ( IF %currentTime% GEQ 05:00:00.00 IF %currentTime% LEQ 23:59:59.59 ( start /b "" "C:\Program Files\Activity\activities.exe" -process acte ) ) IF "%%~nxF"=="%filename6%" ( IF %currentTime% GEQ 06:00:00.00 IF %currentTime% LEQ 23:59:59.59 ( start /b "" "C:\Program Files\Activity\activities.exe" -process actf ) ) ) popd 

代码的快速修复可能只是将您的底部两行替换为:

 If /I "%fileName%"=="%process_one%" Start "" /B "process.exe" -process "%process_one%" If /I "%fileName%"=="%process_two%" Start "" /B "process.exe" -process "%process_two%" 

我建议你应该删除pushd "%path%" &&& popd或者至少改变(%path%\*.*)(*.*)

假设脚本部分没有错误,您已经决定省略,下面是对您发布的代码的最佳猜测重写/替换:

 If Not Exist "%_path%\" Exit/B 1 For %%F In (%_path%\*.*) Do (Set/A count+=1 For %%G In ("%process_one%" "%process_two%") Do If /I "%%~nxF"==%%G ( Start "" /B "process.exe" -process %%G)) Exit/B 0 

重要提示
您需要确保您已经有一个名为%count% set的整数变量, 可能Set "count=0" 。 如果你不在脚本的其他地方使用%count% ,你可以忽略这个建议,并从上面提供的代码中移除Set/A count+=1 。 您需要在未从%path%发布到%_path%的脚本的任何部分中更改变量名称。 您已经声明已经有了名为%process_one%%process_two% set的字符串变量