Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows批处理:比较时间和字符串文本_Windows_Batch File - Fatal编程技术网

Windows批处理:比较时间和字符串文本

Windows批处理:比较时间和字符串文本,windows,batch-file,Windows,Batch File,我编写了一个批处理脚本,在给定的时间范围内,如果目录中的文件名与其预期的文件名相等,则将运行.exe 例如,路径中的文件是“file1”和“file2”,而process_one=“file1”和process_two=“file2” 结果是,即使条件为false,它也将始终转到第一个if语句 这里不起作用的是if语句。 例如 file1=“filenameA.txt”;process_one=“filenmameB.txt” 它总是在first if语句中执行命令,即使它是false 我是否正

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

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

结果是,即使条件为false,它也将始终转到第一个if语句

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

它总是在first if语句中执行命令,即使它是false

我是否正确比较了时间和字符串文字?如果不是,时间和字符串文字的正确比较是什么

这是我到目前为止所做的。我是新来的,所以谢谢你的真知灼见。:)



对代码的快速修复可能只是将下面两行替换为:

If/I“%fileName%”==%process\u one%”“Start”“/B”process.exe”-process“%process\u one%”
如果/I“%fileName%”==%process\u two%“Start”“/B”process.exe”-process“%process\u two%”
不过,我建议您删除
pushd“%path%”&&&
&popd
,或者至少将
(%path%\*.*)
更改为
(*.*)


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

如果不存在“%\u路径%\”退出/B 1
对于%%F In(%\u路径%\*.*)Do(设置/A计数+=1
对于%%G In(“%process\u one%”“%process\u two%”)执行If/I“%%~nxF”==%G(
启动“/B”进程.exe”-进程%%G))
退出/b0

重要注意事项
您需要确保已经设置了名为
%count%
的整数变量,可能是
设置“count=0”
。但是,如果您没有在脚本的其他地方使用
%count%
,则可以忽略该建议,并从我上面提供的代码中删除
Set/A count+=1
。您需要将尚未发布的脚本任何部分中的变量名从
%path%
更改为
%\u path%
。您已经声明,您已经设置了名为
%process\u one%
%process\u two%
的字符串变量。

以及脚本中不起作用的内容?
)&popd
这意味着每次迭代都将执行
popd
。为什么不放在单独的行上,而是附加到for循环中?用自己的PATH变量覆盖PATH变量通常不是一个好主意。调用标签只会减慢批处理文件的速度。在这种情况下,您没有必要这样做。在您的示例中,您可以在FOR块内执行所有操作。您可以只执行
IF EXIST
命令,而不是有条件地执行FOR命令。您在哪里定义了流程变量。这段代码是相关的。我明白了,我尝试了建议的解决方案,但问题是,它总是在第一条if语句中执行命令……它总是在第一条if语句中启动进程。顺便说一下,我有of than if语句,每个if命令都包含执行特定.exe文件的过程。您需要发布整个脚本,以便我们调试其余代码。问题是您没有告诉我们您真正在做什么,您不能使用
GEQ
/
LEQ
这样的时间比较,尤其是那些包含
这样的字符的比较。我要做的是,如果文件名等于预期的文件名,并且当前时间在时间范围内,它应该运行特定的应用程序。我知道,只是你不能那样做。我建议你发布一个新的问题,特别是在比较范围内的时间字符串方面寻求帮助,或者相应地彻底修改你的开场白。
@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