2017-06-30 46 views
1

重命名文件我想要重命名initialy命名一些像這樣的文件:批次:通過數字填充用零

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

難道你不能簡單地用'KIT0'替換/替換'KIT' – Compo

回答

1

雖然使用的是延遲擴展您的%Replace%已經在一個區域需要延遲擴展,所以你用不同的方法需要兩次:

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 

如果輸出看起來OK刪除Call和Ren之間的回聲。

+0

我對批處理文件並不熟悉! 當你說「一個需要延遲擴展的區域」是因爲「for/r %%#in」嗎?如果不是那麼因爲什麼? 延遲擴展是使用雙重百分比「%%」完成的?這個擴展符號「%」和這個「!」之間有什麼區別? 非常感謝你的幫助和你的回答 – Yazan

+0

簡而言之:這是cmd分析批處理的方式。首先評估括號內的區域變量(代碼塊)。如果**在代碼塊中設置了一個變量**,那麼它的新值只能通過延遲擴展來檢索。在你的情況下,'Pattern'和'Replace'在代碼塊中設置,替換命令本身需要延遲擴展來強制實際值以及變量File。僞調用是一種較老的方法,用於雙edelayed擴展。有關如何cmd分析batche的詳細信息,請參閱[本問答](https://stackoverflow.com/questions/4094699) – LotPings

+0

感謝您的幫助和解釋 – Yazan