0
@echo off
set test=%1

if "%1"=="" (
set test=default
echo %test%
) else (
set test=%1
echo %test%
)

テスト:

test.bat

出力:

ECHO is off

問題:「デフォルト」文字列を変数「テスト」に値として割り当てることができません。テスト文字列の値はまだ%1であり、値がないことがわかりました

4

2 に答える 2

4

これは標準的なバッチ初心者のバグです。パーセント拡張は、期待どおりに括弧内で機能しません。ブロック全体が解析されると、行が実行される前に展開されます。

したがって%test%、ブロックに入る前の値であるゼロに展開されます。

!test!解決策は、解析時間ではなく実行時に拡張されるため、ここで遅延拡張を使用することです。

@echo off
setlocal EnableDelayedExpansion
set test=%1

if "%1"=="" (
  set test=default
  echo !test!
) else (
  set test=%1
  echo !test!
)
于 2012-12-06T10:03:41.710 に答える
0

私はそれがそのように機能することに気づいていませんでしたが、内部ブロックで変更された値が伝播されないというスコープの問題のようです。以下は正常に機能しているようです。

@echo off

if "%1"=="" (
    set test=default
) else (
    set test=%1
)
echo %test%
于 2012-12-06T07:28:51.600 に答える