我在批处理文件中有以下DOS命令:
SET "REALM="
ECHO %REALM:/=.%
SET "REALM=Westeros"
ECHO %REALM:/=.%
SET "REALM=Westeros/"
ECHO %REALM:/=.%
最后两个命令给出了预期的结果: 维斯特洛 维斯特洛。
但是第一个,在空变量上替换/
.
,给出:
/=.
为什么会发生这种情况,我该如何做到这一点?
答案 0 :(得分:3)
这是具有未定义变量的解析器的问题/特征。
Windows命令解释器(CMD.EXE)如何解析脚本?
另见How does the Windows Command Interpreter (CMD.EXE) parse scripts?
要解决此问题,您需要首先测试未定义的变量,例如。
set "REALM="
if defined REALM SET "REALM=%REALM:/=.%"
echo( %REALM%
我在这里用echo(
来避免变量为空时输出“ECHO IS OFF”。
答案 1 :(得分:0)
如果你制作SET "REALM="
。然后%Realm%
未定义(没有任何值)。