2012-09-20 2 views
7

バッチスクリプトでplsqlを含むフォルダ名をコンパイルするために実行することがあります。ループ用バッチスクリプトで変数が設定されない

for /F %%a in ('dir /b D:\AHP_WorkDir\var\jobs\projects\rprt_test\rprt_test\plsql') do (
    set FOLDER=%%a 
    echo *** PROCESSING FOLDER %FOLDER% *** 
) 

このエコー *処理FOLDER *私はそれをそう

を検証する上であまりにも長い道のりを過ごした後に真であるかなり確信している変数が設定されて取得されていないかのように

、 ...どうしたんだ?

+0

ヒント: 'ENABLEDELAYEDEXPANSION'を検索 – adarshr

+2

この同じ問題を扱う多くの既存の質問がたくさんありますが、それらはすべて同様の答えを持っています。答えはヘルプシステム内で見つけることができます - コマンドラインから 'HELP FOR'または' FOR /? 'をタイプしてください。ヒント - 遅延拡張の議論を探します。 – dbenham

+0

@dbenham - :-)あなたは正しく死んでいる!このタイプの質問ごとに1セントしか得られない場合... – jeb

答えて

23

これは本質的にquestion asked earlier todayの複製です。ここに質問からの私の答えです...

バッチファイルのEnableDelayedExpansionオプションを見てみましょう。前述のリンクから:

遅延可変拡張は、FORループで作業する場合に便利です。通常、FORループ全体は、バッチスクリプトの複数の行にまたがっていても、単一のコマンドとして評価されます。

だからあなたのスクリプトは次のようなものを見終わるでしょう。ただ、むしろ新しい変数を作成するよりも、あなたの内側のループで%%a変数を使用して、別の方法として

@echo off 
setlocal enabledelayedexpansion 

for /F %%a in ('dir /b D:\AHP_WorkDir\var\jobs\projects\rprt_test\rprt_test\plsql') do (
    set FOLDER=%%a 
    echo *** PROCESSING FOLDER !FOLDER! *** 
) 

を。

+0

ありがとうジョナ!私はこれが働いたと思う。私はenabledelayedexpansionを使用する私の最初の試みでエコーをオフにしていなかった...私はそれが設定されているかどうかを確認するために値をエコーし​​ようとしていたので、ああ我々が走っているサークル! –

+0

喜んで助けてください!それが助けられたら、答えを受け入れたものとしてマークすることを忘れないでください。そうすれば、将来のこの訪問者はあなたの経験から恩恵を受けることができます。 –

+0

となります。再度、感謝します。 –

関連する問題