2012-02-26 13 views
6

与えられた各パラメータに対して同じアクションを実行するバッチスクリプトを作成しようとしています。例えば、パラメータとしてXファイルを与える:
script.bat "file1.txt" "file2.txt" "file3.txt" "file4.txt" ... "fileX.txt"
はにそれらの名前を変更します:
"file1.bin" "file2.bin" "file3.bin" "file4.bin" ... "fileX.bin"
名前の変更は一例であり、私はあまりにも複雑な操作のためにそれが必要になります。
私はそれがfor eachのようなものでなければならないと思うが、バッチスクリプトでは新しい。バッチは各パラメータを解析します

私はちょうど%1インデックスをインクリメントすることができれば、私はちょうど疑問に思う...

答えて

8

あなたは左のパラメータをシフトするSHIFTを使用することができます。

@ECHO OFF 
:Loop 
IF "%1"=="" GOTO Continue 
    ECHO %1 
SHIFT 
GOTO Loop 
:Continue 

これはただの順序で引数を印刷しますが、次のことができます。シフトを呼び出す言い換えるだからあなたのようなものを必要とするなど

% 2第3、%1に2つ目のパラメータを配置しますループの中で何でもしてください。

1

私が結んだのは以下のとおりです。その後で

::-------------------------------------------------------- 
:: Handle parameters 
::-------------------------------------------------------- 
CALL:ChkSwitch bOverwrite "/OVERWRITE" %* 
CALL:ChkSwitch bMerge "/MERGED" %* 

:私は物事を行う傾向があり、私は共有するだろうと思った...

私のバッチファイルの先頭で、私は次のコードを持っている...

使い方(私は通常私のすべての機能を置く)下...

機能:

::-------------------------------------------------------- 
:: ChkSwitch Function 
::-------------------------------------------------------- 

:ChkSwitch <bRet> <sSwitch> <sParams> (
    SETLOCAL EnableDelayedExpansion 
    SET "switched=0" 

    :ChkSwitchLoop 
    IF "%~3"=="" GOTO ChkSwitchDone 

    IF %~3==%~2 (
     SET "switched=1" 
     GOTO ChkSwitchDone 
    ) 

    SHIFT /3 
    GOTO ChkSwitchLoop 

    :ChkSwitchDone 
) 
( 
    ENDLOCAL 
    SET "%~1=%switched%" 
    EXIT /B 
) 

これをシンプルに使うには。あなたは、あなたが探しているスイッチを渡して最後にスクリプトから全てのパラメータを渡すのではなく、変更したい変数に渡す関数を呼び出すだけです。

2

あなたはこのような何かを、ちょうどあなたが望む複雑追加することができます。

for %%x in (%*) do (
    echo %%x 
) 
関連する問題