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



我使用了这个脚本:

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
)

这次我可以将回显 %%j 设置为 42,但我无法将我的变量 crs 设置为 crs3。 你能帮忙吗? 谢谢

  • 如果%%J已经包含双引号,你的 if 可能是 有效,如果不是,这永远不会是真的。
  • 确保使用~修饰符去除可能的双引号和 自己设置它们。

IF "%%~J" EQU "40" (SET crs=crs1)
  • 此外,%%J%%j是不同的元变量 - 在您的批处理中,您 在小写和大写中使用它们一次。
  • 如果变量可能为空,则放置不同的命令分隔符 例如,回声(=后面 - 不是空格。这将返回echo is on/off那么。
  • 不需要中间文件,堆叠两个查找命令和 使用for /f解析输出

:: Q:Test2018627SO_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
)

最新更新