Как я могу установить свою переменную в пакетном файле Windows? - PullRequest
0 голосов
/ 27 июня 2018

Я использовал этот скрипт:

rem @echo off
SETLOCAL enableDelayedExpansion
Set crs=
REM Get the result from sl.txt
FIND "LISTENER_SCAN1" <sl.txt >sl_temp_01.txt
FIND "running" <sl_temp_01.txt >sl_final.txt
DEL sl_temp_01.txt
for /F "tokens=8 delims= " %%j in (sl_final.txt) do (
IF %%J EQU "40" (SET crs=crs1)
IF %%J EQU "41" (SET crs=crs2)
IF %%J EQU "42" (SET crs=crs3)
IF %%J EQU "43" (SET crs=crs4)
Echo %%j
Echo !crs!
Pause
)

На этот раз я могу получить echo %% j как 42, но я не могу установить свою переменную crs как crs3. Не могли бы вы помочь? Спасибо,

1 Ответ

0 голосов
/ 27 июня 2018
  • Если %%J уже содержит в себе двойные кавычки, то ваш if может быть допустимо, если нет, то это никогда не соответствует действительности.
  • Чтобы быть уверенным, используйте модификатор ~ для удаления возможных двойных кавычек и установите их сами.

IF "%%~J" EQU "40" (SET crs=crs1)
  • Также %%J и %%j являются различными мета-переменными - в вашем пакете вы используйте их один раз в нижнем, а затем в верхнем регистре.
  • Если переменные, возможно, пусты, установите другой разделитель команд за эхом (= например - не пробел. Это вернется echo is on/off тогда.
  • Нет необходимости в промежуточных файлах, составьте две команды поиска и проанализировать вывод с for /f

:: Q:\Test\2018\06\27\SO_51067292.cmd
@echo off & SETLOCAL enableDelayedExpansion
Set "crs="

for /F "tokens=8 delims= " %%J in (
    'FIND "LISTENER_SCAN1" ^<sl.txt ^| FIND "running"'
) do (
    IF "%%~J" EQU "40" (SET crs=crs1)
    IF "%%~J" EQU "41" (SET crs=crs2)
    IF "%%~J" EQU "42" (SET crs=crs3)
    IF "%%~J" EQU "43" (SET crs=crs4)
    Echo=%%J
    Echo=!crs!
    Pause
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...