Это продолжение с этого поста: Comparing string literals and timeBatch сценариев: Вызов команды запуска внутри если-оператора блока
Сравнение строковых литералов и время теперь правильны, спасибо всем, кто внесли свой вклад в мой предыдущий вопрос.
Однако проблема заключается в вызове команды «start» внутри оператора if-block.
Давайте посмотрим этот код,
setlocal EnableDelayedExpansion
For /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set MyDate=%%x
SET triggerFolderPath=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%
.
.
.
for %%F in (%triggerFolderPath%\*.*) do (
echo %%~nxF
IF "%%~nxF"=="file_one.txt" (
IF %currentTime:~0,2% GEQ 18 (IF %currentTime:~0,2% LEQ 23 (echo success
echo process_one
start /b "" "C:\Program Files\Process.exe" -process ProcessOne))
)
IF "%%~nxF"=="file_two.txt" (
IF %currentTime:~0,2% GEQ 08 (IF %currentTime:~0,2% LEQ 23 (echo success
echo process_two
start /b "" "C:\Program Files\Process.exe" -process ProcessTwo))
.
.
.
)
endlocal
exit /b 0
EXIT /B %ERRORLEVEL%
Дано: %% ~ nxf = file_two; Я добавил команду echo, чтобы увидеть, было ли условие удалено.
Программа была способна выводить вторит для этого, если условия
IF "%%~nxF"=="file_two" (
IF %currentTime:~0,2% GEQ 08 (IF %currentTime:~0,2% LEQ 23 (echo success
echo process_two
start /b "" "C:\Program Files\Process.exe" -process ProcessTwo))
)
Однако ошибка, он продолжает выполнение ProcessOne, вместо ProcessTwo. Я попытался поместить стартовую команду сразу после открытия скобки "(" или перед командой, но она все еще обрабатывает ProcessOne. Почему она обрабатывает ProcessOne, если она не включена в последний оператор if-block, который обрабатывает ProcessTwo/
Учитывая, что вы используете переменную команды FOR, этот код находится внутри блока кода. Поэтому, если переменная currentTime установлена в этом кодовом блоке, тогда ей необходимо ссылаться на Delayed Expansion. Таким образом, вы не показываете нам весь код, который влияет на вашу существующую проблему. – Squashman
Хотя я все еще придерживаюсь своего предыдущего заявления, вы столкнетесь с проблемами с ведущими нулями в ваших номерах. Возьмите это, например: 'IF 1 GTR 08 echo yes'. На самом деле это даст да. – Squashman
@Squashman, привет, я отредактировал мое сообщение. Для вашего последнего комментария я думаю, что это 'SET currentTime =% Time: = 0%' уменьшает проблему с ведущими нулями ... правильно? – newbie