2017-12-27 11 views
-2

特定のパスのフォルダ内のファイルを検索する必要があります。ファイル名のリストを含む.csvファイル。指定されたディレクトリ内のファイルを検索します。 .csvファイルに記載されているファイルのいずれかが検索パスに見つからない場合は、エラーメッセージが表示されます。ファイルを読み取ってフォルダ内で見つける方法

私たちは、以下のスクリプトを使ってみましたが、それは動作していない:

set InputFile=C:\Users\336727\Desktop\arun\SearchMCSentry\inputs.csv 
:start 
for /f "tokens=*" %%A in ('type "%InputFile%"') do ( 
    set "Found=1" 
     for /R %%f in ("%%A") do ( 
    echo ---%%f and Found = %Found% 
      if exist %%f (
      set Found=2 
    echo ====%%A and Found = %Found% 
      pause 
      ) 
    echo %%A and Found = %Found% 
     ) 
    if %Found%==1 goto :error 

    ) 
    :error 
    echo File not found 

あなたはplsはこれを達成するためにどのように私たちを助けてもらえます。

あなたはdelayedexpansionの罠に落ちてきたおかげで、 Parag

+2

「遅延拡張」のトップバーの機能を使用してSOを検索してください。それは 'found 'の価値に対するあなたの期待がなぜ満たされていないのかを説明するはずです。あなたの 'for .. %% A ...'の全身は '存在しない場合 'に置き換えることができます%%" goto error'、フラグ問題を完全に破棄します。 – Magoo

+1

* "うまくいかない" *は問題文ではありません。 [ask]をお読みください。 – IInspectable

答えて

0


DOS上で実行されている古いバッチスクリプトで拡張

遅れているどのようなラインが走っているとき、変数は(その値になって)展開されます。つまり、forループのすべての変数は、プロセッサがforループの実行を開始すると展開されます。

あなたのケース

変数 %found%が以前に設定されていない

(少なくとも私が見ることができるもの)。したがって、ループを実行すると、これらの処理が行われます。遅延拡張を有効にし

を修正する方法 -

if ==1 goto :error 

を(拡張は、実行時ではなく、フレーズ時に発生してみましょう)。

setlocal enableDelayedExpansion 
及びプロセッサは、実行時にそれを拡大する必要性を理解するように!found!%found%を変更:あなたのループの前に次の行を追加します。

0

別の方法 - CALL SET

あなたがdelayed expansionが気に入らない場合、あなたが効果をエミュレートするためcall setを使用することができます。

call set found=1 
call echo %%found%% 

このcall commandトリックはforifを除くすべてのコマンドに取り組みます。 CALL REMは部分的にしか動作しません。

絶対に必要でない限り、delayed expansionを使用することをおすすめします。 CALL SETが遅くなります。

関連する問題