2017-06-30 4 views
1

でパディング番号でファイルの名前を変更:バッチ:私はこのようなで初期状態という名前のいくつかのファイルの名前を変更したいゼロ

KIT0_rawinput_descriptors.m => KIT00_rawinput_descriptors.m 
KIT0_rawinput_estimation.m => KIT00_rawinput_estimation.m 
KIT0_rawinput_label_kp.m 
KIT1_rawinput_descriptors.m => KIT01_rawinput_descriptors.m 
KIT1_rawinput_estimation.m 
KIT1_rawinput_label_kp.m 

を私は、このバッチファイルを書きましたが、それは動作しません、それが持つ別のファイルがあることを述べています同じ名前またはファイルが見つかりません!私はポイントを得ていない!私

setlocal enableextensions enabledelayedexpansion 
set idx="xx" 
for /l %%x in (0, 1, 1) do (
    Set "Pattern=KIT%%x_" 
    Set "Replace=KIT0%%x_" 
    for /r %%# in (*!Pattern!*) do (
     Set "File=%%~nx#" 
     echo "!File!" 
     rem Ren "%%#" "!File:%Pattern%=%Replace%!" 
     ) 
    ) 
endlocal 
+0

'KIT'を' KIT0'と置き換えたり置き換えたりすることはできません。 – Compo

答えて

1

を助けてください、あなたが遅れた拡張を使用しているにもかかわらず、あなたの%Replace%が遅れる拡大を必要とする地域に既にあるので、あなたは別の方法で二回、それを必要とする:出力はOK削除に見える場合

setlocal enableextensions enabledelayedexpansion 
set idx="xx" 
for /l %%x in (0, 1, 1) do (
    Set "Pattern=KIT%%x_" 
    Set "Replace=KIT0%%x_" 
    for /r %%# in (*!Pattern!*) do (
     Set "File=%%~nx#" 
     echo "!File!" 
     Call Echo Ren "%%#" "%%File:!Pattern!=!Replace!%%" 
     ) 
    ) 
endlocal 

CallとRenの間のエコー。

+0

私は本当にバッチファイルに精通していません! "for/r %%#in"のため、 "遅延拡張が必要な​​領域"と表示されていますか?もしそうでなければ何のために? 遅延拡張は二重パーセント "%%"を使用して行われますか?この拡張シンバル "%"とこの "%"の違いは何ですか? ご協力ありがとうございます – Yazan

+0

要するに、これはcmdがバッチを解析する方法です。括弧で囲まれたエリア内の変数(コードブロック)が最初に評価されます。 ** **コードブロック内に変数を設定すると、新しい値は遅延拡張でのみ取得されます。あなたのケースでは、 'Pattern'と' Replace'がコードブロックに設定されています。実際の値と変数Fileを強制的に変更するには、replaceコマンド自体に遅延拡張が必要です。擬似呼び出しは、ここで二重拡張されたエクスパンシンに使用される古いメソッドです。 cmdがどのように構文解析するかについての詳細は、[this Q&A](https://stackoverflow.com/questions/4094699)を参照してください。 – LotPings

+0

ご協力ありがとうございます。 – Yazan

関連する問題