好的,我疯了,我不知道还能做什么,我已经尝试了几件事,但没有任何工作。
查看此示例代码(test.cmd):
setlocal enabledelayedexpansion enableextensions
set VAR=before
if "%VAR%" == "before" (
set VAR=after;
if "%VAR%" == "after" @echo If you see this, it worked
)
这是生成的输出:
D:\>ver
Microsoft Windows [Version 6.1.7600]
D:\>test.cmd
D:\>setlocal enabledelayedexpansion enableextensions
D:\>set VAR=before
D:\>if "before" == "before" (
set VAR=after;
if "before" == "after"
)
D:\>
我做错了吗?
这只是一个测试,我需要的代码也使用变量并且需要延迟扩展,但是这个简单的测试不起作用,其他也无法工作(我试过,我最后用一个简单的例子来测试如果它奏效了。)
编辑:新代码和输出:
TEST.CMD:
@echo off
setlocal enabledelayedexpansion enableextensions
set VAR=before
if "%VAR%" == "before" (
set VAR=after;
if "!VAR!" == "after" (
echo It worked.
) else (
echo It didn't work.
)
)
输出:
D:\>test.cmd
It didn't work.
D:\>
答案 0 :(得分:14)
您必须使用!var!
进行延迟扩展。 %var%
始终在解析阶段展开。
即,将代码更改为
setlocal enabledelayedexpansion enableextensions
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo If you see this, it worked
)
答案 1 :(得分:1)
不要使用==,批量使用EQU
例如写:
if %bla% EQU %blub% echo same
答案 2 :(得分:1)
在cmd提示符开头,您必须键入“ CMD / V”或“ CMD / V:ON”
此测试代码成功后
SETLOCAL EnableDelayedExpansion
Set "_var=first"
Set "_var=second" & Echo %_var% !_var!
答案 3 :(得分:0)
我找到了你的问题。
set VAR=after;
从上面的代码中删除;