2016-05-02 12 views
2

単純なバッチファイルを作成して、そのディレクトリ内のすべてのファイルから7zipアーカイブを作成しようとしています。ループ増分値のバッチENABLEDELAYEDEXPANSION

私はどうやらバッチforループISNの値をインクリメント a01.7z a02.7z a03.7z ...

のような名前を取得するには7zipを-アーカイブを望みます簡単だ。

set /a counter=0 
for %%i in (*.*) do (
    call :pass2 
    goto :cont 
    :pass2 
     set /a counter=%counter%+1 
     goto :EOF 
    :cont 
     "c:\Program Files\7-Zip\7z.exe" a a%counter% "%%i" 
) 

これは動作しません:

SETLOCAL ENABLEDELAYEDEXPANSION溶液(窓10、64ビット)

誰かがサブルーチンでインクリメントコードを置くことを示唆し自分のコンピュータ上で動作しません。何とかDOSが最終的な "%% i"をもう理解せず、単に "%i"を出力するからです。

forループをカウンタでバッチで作成する方法を教えてください。

+0

EnabledDelayedExpansionは異なるモードをオンにします。遅延変数は '!var!'であり、遅延拡張がオフ(通常の状態)の場合は有効な変数名です。ヘルプと説明は 'set /?'を参照してください。あなたが特に実行時に展開しない限り、通常は '%var%'という変数を参照することに注意してください。あなたが問題を抱えている理由は、コードが角括弧内にあることです。つまり、すべての行が1行として扱われます。そのため、行のブロックが読み込まれるときに変数の展開が行われます。 –

+0

あなたのサブルーチンが間違っています。 1 /それは括弧の中にあります2/'%% I 'をパラメータとしてサブルーチンに渡すと、サブルーチンは'%1'を介してそれにアクセスします。 'call /? 'を参照してください。 3 /サブの最後に 'Goto:eof'を入れます。その後、メインルーチンはそれを飛び越える必要があります(または 'goto:eof'を介して終了する必要があります)。 'goto /? 'を参照してください。 –

+0

私にものを教えてくれてありがとう! – Hakkelaar

答えて

2

これは、左ゼロで、二桁の数字を生成する最も簡単な方法である:

@echo off 
setlocal EnableDelayedExpansion 

set /A counter=100 
for %%i in (*.*) do (
    set /A counter+=1 
    "c:\Program Files\7-Zip\7z.exe" a a!counter:~1! "%%i" 
) 
+0

不思議なことに、このコードのsetlocal EnableDelayedExpansionは自分のコンピュータで動作します。私はタイプミスをしたのでしょうか? 2桁のカウンターbtwで非常に創造的です。私は仮定します:〜1は、変数の最初の桁を切り捨てます。 – Hakkelaar

0

これは、1ファイルにつき1つのファイルを追加します。