2016-12-19 4 views
0

ディレクトリからループにファイル名を取得して処理します(ファイル名に部分文字列を使用することを最終目的としています)。それを働かせる。Windowsバッチファイル - 移動/ループ変数の取得

私はたくさんグーグルで行きました。私がやっていることはうまくいくはずですが、明らかに何かが欠けているようです。

はここに私のコードです: -

setlocal ENABLEDELAYEDEXPANSION 
set files=*.* 
FOR %%A IN ("%files%") DO (
    echo %%A 
    Set MYVAR=%%A 
    echo MYVAR=%MYVAR% 
) 
pause 

%%Aechoが正常に動作しますが、MYVARは常に空です。角括弧を追加する前に、私はこの作業を1行先で にしました。

助けてください。私はこれまでにあまりにも長い時間を費やして、私の髪を引っ張っています。

+1

[遅延膨張](http://ss64.com/nt/delayedexpansion.html) – npocmaka

+0

おかげ。それは私が使用する必要があることを実現するのに役立った! – BFG

+0

[なぜFORループ内で環境変数が更新されないのですか?](http://stackoverflow.com/questions/40335392/why-are-environment-variables-not-updating-within-for-loop) – aschipfl

答えて

0

次の2つの方法のいずれかを試してみてください。

いずれか:

@Echo Off 
SetLocal EnableDelayedExpansion 
Set "files=*.*" 
For %%A In ("%files%") Do (
    Echo=%%A 
    Set "MYVAR=%%A" 
    Echo=MYVAR=!MYVAR! 
) 
Timeout -1 

または:

@Echo Off 
Set "files=*.*" 
For %%A In ("%files%") Do (
    Echo=%%A 
    Set "MYVAR=%%A" 
    Call Echo=MYVAR=%%MYVAR%% 
) 
Timeout -1 
+0

ありがとうございます。使用! %の代わりに働いた。私はタイムアウト-1を必要としていないようです。それは何のためですか? – BFG

+0

あなたは 'pause'を使いました。' timeout'は事実上、もう少しコントロールを加えた同様のコマンドです。詳しくは 'Timeout /? 'をタイプしてください。 – Compo

+0

ああ、大丈夫だよ。ありがとう。 – BFG

関連する問題