2009-11-19 63 views
1

好吧,我越來越瘋狂,我不知道還有什麼要做,我已經嘗試了幾件事,沒有任何工作。批量延時擴展不起作用

看看這個示例代碼(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:\> 
+3

代碼刪除;失去分號在線路 組VAR =之後; 它應該工作 – 2009-11-19 13:03:49

+0

就是這樣!一個分號......我,我是一個新手:) – Richard 2009-11-19 13:39:17

回答

12

你必須使用!var!的延遲擴展。分析階段總是擴展%var%

即,更改您的代碼

setlocal enabledelayedexpansion enableextensions 
set VAR=before 
if "%VAR%" == "before" (
    set VAR=after 
    if "!VAR!" == "after" @echo If you see this, it worked 
) 
+0

不,在這種情況下,輸出是「if」!VAR!「==」在「」之後。 – Richard 2009-11-19 12:31:25

+2

不要擔心你看到的命令迴應屏幕;延期擴張的關鍵是在此之後完成。將@ECHO置於腳本的頂部,您將看到它正在工作。 – 2009-11-19 12:44:57

+0

HoursWasted ++;謝謝!那是我的兩倍。 – 2012-07-26 15:59:00

2

不使用==,在批處理必須使用EQU

對於寫入例:

if %bla% EQU %blub% echo same 
0

,我發現你的問題。

set VAR=after; 

從上方