2011-07-25 9 views
1

バッチファイルを書くのが初めてです。文法が私を吐き出させてしまうので、私は離れようとします。簡単に言えば、膨大な量のデータをチェックし、すべてをWindowsの.csvファイルにエクスポートする、すばやく簡単な方法が必要でした。私は仕事をするための簡単なバッチファイルを書きました。バッチファイルの可変スコープ

私は可変スコープにいくつか問題があります。このコードのアイデアは、コンマで区切られた一連のデータを作成し、出力をエコーすることです。別のファイルが出力をキャッチしますが、それは重要ではありません。ここ

は私が午前問題を表示するいくつかの擬似コードで、私はこの問題に数回実行したと[OK]を、ここで私が何を考えている

setlocal EnableDelayedExpansion 
::pseudo code for loop 
LOOP THROUGH LIST OF FILE PATHS PUTTING THEM INTO %%B do (

set str=, ::reset str 

other code 

if exist %%B ( 

    other code 

    ::echos the file path and checks if it is a specific file i need to search 
    echo %%B 2> NUL | find /I /N %%B "%phrase_0_%" > NUL 
    if %ERRORLEVEL% == 0 ( 

     ::HERE IS THE PROBLEM SEE BELOW FOR MORE INFO 

     type %%B 2> NUL | find /I /N "%phrase_1_%" > temp.txt 
     set /p var=<temp.txt 
     set "str=!str!%var%," 
     del temp.txt 

     type %%B 2> NUL | find /I /N "%phrase_2_%" > temp.txt 
     set /p var=<temp.txt 
     set "str=!str!%var%," 
     del temp.txt 
    ) 

) else (::OTHER CODE) 

echo !str! 
) 
endlocal 

それを試してみて、避けるために、大幅に私のコードを再構築してきました問題は。私はネストされた変数呼び出しに問題がありました。私はループトリックで便利な方法を使って1つのコマンドの出力を変数に入れていましたが、変数の値を変更することでさらに難しいネストが必要でした。 !のSETLOCAL EnableDelayedExpansionとstrを使用して

if exists %%B(

:あなたが見ることができるように、私は内部%のSTRの%で混乱することができます!ナンセンス。しかし、それは私が

if %ERRORLEVEL% == 0 

で別のレベルを下に行くときあなたたちは問題があるかもしれない、または溶液が何であるか何にいくつかの提案を持っていない動作しませんか?

答えて

2

遅延拡張は、ネストレベルに関係なく機能します。

set /p var=<temp.txt 
set "str=!str!%var%," 

あなたは%var%が持つことを期待何値:しかし、あなたは、とにかくここに他の問題がありますか?値を設定し、それを2つの連続した行で使用しています内のブロック。遅れて展開する必要もあります。

+0

'%var%'が持つと期待しているのは 'type %% B 2> NUL |/I/N "%phrase_2 _%"コマンドを検索します。ファイルを検索して特定のフレーズを探し、行と行番号を出力する必要があります。 あなたは、ソリューションが 'set" str =!str !! var!、 "'になることをお勧めしますか? – Newbie

+0

もちろん。 '%var%'は実際に最も外側のブロックを入力する前に置き換えられます。 – Joey