2016-05-19 5 views
0

batchスクリプトからこのコードがあります。スクリプトがで失敗します。")はこの時点で予期せぬことだった" - バッチスクリプト

")この時点では予想外だった"

SETLOCAL EnableDelayedExpansion 

set var="value " 
    echo !var! 
    IF "!var!"=="value " (
     echo Perfect) 

P.S.スクリプトにDelayed Expansionが必要です。

+1

はWMIC出力がUnicode(UTF-16リトルエンディアン)であるように環境変数にwmic' 'の出力を割り当てることに注意してください) を突破しました。 'wmic'の出力をANSI文字列として得る方法の詳細については、[出力を解析する際の変数の誤った書き換えを修正する方法](http://stackoverflow.com/questions/24961755/)の回答を参照してください。 – Mofi

+0

アドバイスありがとう:) はい私はその部分に注意しています。あなたがこれを思いついたので、wmicコマンドの望ましくない出力をNULにリダイレクトする方法はありますか?それはコンソールに同じものを表示したくないということです。このようなもの: for/f "skip = 1 tokens = 7" %% f in( 'wmic process where' name = 'java.exe' "コマンドラインを取得する)do(set v = %% f) Inこの非常にケースが 'java.exe'の産出インスタンスがない場合私はコンソールで出力を参照してください - いいえインスタンス それは正しいですが、私はコンソールに同じ表示されたいのではありません。 –

答えて

0

あなたはこのような引用符を使用することができ、変数名に末尾にスペースを含める場合は、エラーmessages.Thoughのない作品を掲載しました抜粋:表彰をもとに

@echo off 
SETLOCAL EnableDelayedExpansion 

set "var=value " 
    echo !var! 
    IF "!var!" == "value " (
     echo Perfect) 

編集を:

@echo off 
setlocal enableDelayedExpansion 
for /f "usebackq" %%f in (`"wmic process where name='java.exe' get commandline /format:value"`) do (
    call ::run "%%~f" 
) 

:run 
for /f "tokens=7" %%# in ("%%~1") do set "var=%%#" 
echo "!var!" 
IF "!var!"=="someValue " ( 
    echo Already running 
) Else (
echo S 

+0

スペースは必須です。ここでスクリプト全体を貼り付けることはできませんが、変数varは基本的にスペースを含む "wmic"コマンドの出力に割り当てられます。 IFループに遭遇すると、上記のようなエラーが発生します。 –

+0

@SupratimDas - コードの大きな部分を貼り付ける必要があります。あなたの問題は[this](http://www.dostips.com/forum/viewtopic.php?t=4266)によって引き起こされている可能性があります – npocmaka

+0

ここでは次のようになります: for/f "skip = 1 tokens = 7" %% f in( 'wmic process where' name = 'java.exe' "get commandline ')do( \t \t set v = %% F \t \t後藤実行 \t \t) :\t \tセットVARを実行= V! \t echo "!var!" \tエルス "!のVAR!" == "someValueの"( \t \t \t \tがすでに実行されているエコー)( \t \t \tエコーが停止) がここFORループからの出力は、基本的には変数vに設定されている場合1行目の7番目のトークン。その変数は 'var'に格納され、IFチェックで使用されます。 IFチェックが真であっても、IFループ内のコマンドは実行されません。 IFループ内には、1つのステートメントではなく、たくさんのコマンドがあります。 –

関連する問題