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:\>

私は何か間違ったことをしていますか?

これは単なるテストです。必要なコードは変数も使用し、遅延展開が必要ですが、この単純なテストは機能しませんが、他のテストも機能しません (試してみたところ、機能するかどうかをテストするための簡単な例になりました)。

編集: 新しいコードと出力:

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:\>
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 に答える
1

== を使用しないでください。バッチでは EQU を使用する必要があります

たとえば、次のように記述します。

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

私はあなたの問題を見つけました。

set VAR=after;

;上記のコードから削除

于 2013-03-08T15:16:40.757 に答える