如何在Windows批处理文件中设置变量?

时间:2018-06-27 16:14:05

标签: batch-file

我使用了这个脚本:

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 :(得分:2)

  • 如果%%J已包含双引号,则if 有效,如果不是这样,那就永远都不是。
  • 为确保使用~修饰符去除可能的双引号和 自行设置。

IF "%%~J" EQU "40" (SET crs=crs1)
  • %%J%%j也是不同的元变量-在您的批次中, 先用小写然后再用大写。
  • 如果变量可能为空,则使用其他命令分隔符 例如,在回声(=后面-不是空格。这将返回 然后echo is on/off
  • 不需要中间文件,可以堆叠两个find命令和 用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
)