2016-07-18 12 views
0
if /*some condition*/ set myvar=1 


if defined myvar (
    if %myvar% equ 1 (
    echo Hurray 
) 
) 

ただし、エラー1 was not expected at this timeが発生しています。エコーをオンにすると、エラーが発生したif equ 1 (が出力されます。これを解決する方法をアドバイスしてください。変数が定義されているかどうかのバッチファイルチェックとその値

+1

'%myvar%" equ "1" 'が動作するはずです。 '%' myvar% 'に空白や別のトークンセパレータ'、 '' '' = 'が含まれている場合、' '' '' '' '' '' '' '' '' '" ''のないエラー。 [遅延拡張](http://ss64.com/nt/delayedexpansion.html)を使用しないと、 '' 'が含まれているとエラーを回避することはできません... – aschipfl

答えて

0

私は1==1/*some condition*/を交換しました:

@echo off 
if 1==1 set myvar=1 
if defined myvar (
    if %myvar% equ 1 (
    echo Hurray 
) 
) 

これは完璧に動作します。だから、エラーはあなたの状態のどこかにあるはずです。私はaschipflが欠けていることについての権利があると思いますdelayed expansion。これを試してみてください:

@echo off 
setlocal enabledelayedexpansion 
if /*some condition*/ set myvar=1 
if defined myvar (
    if !myvar! equ 1 (
    echo Hurray 
) 
) 

はenabledelayedexpansionを追加し、!...!の代わり%...%を使用して、変数を囲みます。

+0

!var!do? –

+0

変数が展開されていますあなたのスクリプトが処理され、すべての値がvarsに設定されていることを意味します。変数が値を変更し、スクリプトの開始時に新しい値を計算できない場合(例えば、値が "再計算"されるようにするには、... ...!これを遅延拡張と呼びます。 – MichaelS

+0

しかし、これではコードブロックの開始前に変数が既に設定されているので、遅延拡張は必要ありません。Aschipflは質問のコメントで問題の真の原因を特定しました - 値の範囲内のスペース(または他のトークンデリミタ) IFパーサー。比較の両側に引用符を付ける。遅延拡張を使用すると、問題を回避することもできますが、説明したものとはまったく異なる理由があります。 – dbenham

関連する問題