2017-08-20 10 views
0

私たちは何百もの* .pdfファイルをフォルダに持っています。各* .pdfの名前は、ABC_100_filename.pdfまたはABC_200_filename.pdfまたはABC_300_filename.pdfとなります。WindowsバッチスクリプトでIF - ELSE IF条件を呼び出す方法は?

call test.exe 100 filename 
call test.exe 200 filename 
call test.exe 300 filename 

ファイルを検証するために何 IF条件が存在しないため、我々は間違って間違ったIDを使用してファイルをロードする:次のように私たちは* .exeファイルを呼び出すバッチスクリプトで

期待される結果

test.exe 100は、ファイル ABC_100_Testfile.pdfのために呼ばれるべきです。

私たちは誤ってこのファイルの実行の代わりにtest.exe 200を呼び出します。

IF - ELSE IF条件を記述すると、バッチスクリプトで.exeファイルを呼び出すことができます。

if %str1:~0,7%==ABC_100 (call test.exe 100 filename) 
pause 
if %str2%==ABC_200 (call test.exe 200 filename) 
+0

なぜ「古い」Windowsバッチスクリプトを使用しますか?代替のMS技術者を検討してください。 Powershellと呼ばれています:https://docs.microsoft.com/en-us/powershell/scripting/powershell-scripting?view=powershell-5.1 – NoChance

答えて

1

delayed variable expansionとforループが必要です。これは、ループ本体がヘッダーで定義された変数以外の変数を置き換える必要があるたびに必要になります。

SETLOCAL ENABLEDELAYEDEXPANSION 
for /f %%i in ('dir /b *.pdf') do (set pdf=%%~ni & set str=!pdf:~4,3! & set fname=!pdf:~8! & test.exe !str! !fname!) 

は、私はあなたがcall実行に必要とする理由はわからないが、私はあなたのアイデアを得ると思います。

複数行のバージョン:

SETLOCAL ENABLEDELAYEDEXPANSION 
for /f %%i in ('dir /b *.pdf') do (
    set pdf=%%~ni 
    set str=!pdf:~4,3! 
    set fname=!pdf:~8! 
    test.exe !str! !fname! 
) 

今ステップの説明によって、いくつかのステップ:

遅れ拡張として

は、我々は最初の行1.にそれをオンにする必要があり、デフォルトではオフになっているコマンドを実行しますforループ引用符で囲まれた、dir /b *.pdf。出力の各行に対して、その値を代入して実行することによって、に%iを設定します。これは遅延拡張が必要な​​場所です。

最初の行がABC_100_foo.pdfであるとします。値は%iです。このラインのためにループ本体は、次のようになります。

set pdf=ABC_100_foo 
    set str=!pdf:~4,3! 
    set fname=!pdf:~8! 
    test.exe !str! !fname! 

表現%%~niは、拡張子を除いたファイル名に置き換えられました。次の2つのステートメントは、変数pdfから数字100とファイル名fooを抽出し、最後に実行可能ファイルが呼び出されます。出力に残っている行については、ループ本体がアンロールされ、%iの異なる値で再度実行されます。

ファイル内で実行する場合は、%%iを入力する必要があります。プロンプトで実行する場合は、%iを入力します。 call .exeの

  • する必要はありません

  • 4
    • はのための構文解析を使用_で囲まれているTEST.EXEに渡す番号を提供します。
      @Echo off 
      For /f "tokens=1-2* delims=_" %%A in (
          'Dir /B/A-D "*_*_*.pdf"' 
      ) Do test.exe %%B "%%A_%%B_%%C" 
      

      異なる文字を持つ要素を区切る固定構造とファイル名

    が容易で解析することができる変数の隣接する区切りトークンを配布/ F( ss64.com/nt/for_fを参照します)。

     
    file   ABC_100_filename.pdf 
    delims   _ _ 
    tokens  1 _ 2 _ * (rest) 
    for variable %%A %%B %%C 
    
    +0

    ありがとう@LotPings、私はこのスクリプトをテストする必要があります – goofyui

    +0

    事前実行をチェックしたい場合test.exeにエコーを付加して、何が実行されるのかを確認します。 – LotPings

    関連する問題