4

好的,我快疯了,我不知道还能做什么,我尝试了几件事,但没有任何效果。

看看这个示例代码(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:\>

难道我做错了什么?

这只是一个测试,我需要的代码也使用变量并且需要延迟扩展,但是这个简单的测试不起作用,另一个也不起作用(我已经尝试过,我最终得到了一个简单的示例来测试它是否有效)。

编辑:新代码和输出:

测试.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:\>
4

4 回答 4

22

您必须使用!var!延迟扩展。%var%总是在解析阶段展开。

即,将您的代码更改为

setlocal enabledelayedexpansion enableextensions
set VAR=before
if "%VAR%" == "before" (
    set VAR=after
    if "!VAR!" == "after" @echo If you see this, it worked
)
于 2009-11-19T12:21:27.957 回答
2

在 cmd 提示符的开头,您必须输入“CMD /V”或“CMD /V:ON”</p>

在此测试代码应该可以工作之后

SETLOCAL EnableDelayedExpansion
Set "_var=first"
Set "_var=second" & Echo %_var% !_var!

您应该能够看到输出“第一秒” 示例 cmd 提示屏幕

于 2018-11-08T06:47:40.727 回答
1

不要使用 == ,你必须批量使用 EQU

例如写:

if %bla% EQU %blub% echo same
于 2010-11-24T14:07:18.900 回答
0

我发现了你的问题。

set VAR=after;

;从上面的代码中删除

于 2013-03-08T15:16:40.757 回答