如何在 Batch FOR 迴圈中對數字進行零填入?

如何在 Batch FOR 迴圈中對數字進行零填入?

我正在編寫一個批次文件來在我的建築物中的遠端電腦上執行一些操作。它們都以相同的前綴命名,但末尾的數字發生變化(01-65)。我嘗試按照線上教學創建基於數字的批次文件循環,並想出了這個:

FOR /l %%N in (1,1,65) do (
    set HOSTNAMETOUSE=prefix-%%N
    ECHO %HOSTNAMETOUSE%
)

當它達到 10 後效果很好,因為那時它是兩位數。我需要的是數字1-9顯示為01-09,因為它符合我們的命名模式。本質上,我需要前 9 次迭代的一位數的前導零。如何使用 Windows 批次檔完成此任務?

答案1

您發布的程式碼不可能工作,因為%HOSTNAMETOUSE%在解析語句時會展開,並且在執行循環之前一次解析整個括號內的區塊。因此,擴展值對於所有迭代都是恆定的。

您必須使用延遲擴充來取得執行時的值。

@echo off
setlocal enableDelayedExpansion
FOR /l %%N in (1,1,65) do (
    set HOSTNAMETOUSE=prefix-%%N
    ECHO !HOSTNAMETOUSE!
)

現在根據需要添加 0 前綴。

由於您不需要多個 0,因此可以使用 IF 語句。

@echo off
setlocal enableDelayedExpansion
FOR /l %%N in (1,1,65) do (
    if %%N lss 10 (set HOSTNAMETOUSE=prefix-0%%N) else set HOSTNAMETOUSE=prefix-%%N
    ECHO !HOSTNAMETOUSE!
)

但如果你的號碼寬度超過 2 位,那就不太方便了。更通用的解決方案是添加一串n零與您想要的長度,然後使用子字串操作來保留n最右邊的數字。

@echo off
setlocal enableDelayedExpansion
FOR /l %%N in (1,1,65) do (
    set "n=00%%N"
    set "HOSTNAMETOUSE=!n:~-2!
    ECHO !HOSTNAMETOUSE!
)

您可以輕鬆地將此解決方案擴展到幾乎任意數量的前導零。

答案2

我會這樣做:

  • 將“0”加到每個數字(因此“01”以及“065”)
  • 從此字串中提取最後 2 個字符

如何在批次檔中新增子字串(最後 2 個字元):

SET string=abcd 
echo %string% 
SET string2=%string:~-2%
echo %string2%

答案3

@dbenham 的答案沒有什麼新內容,只是從命令列收集了一些值變量並將其放在這裡​​以便於複製和粘貼 - 信用是上面@dbenham 的全部:

set first=%1
set last=%2
set len=%3
setlocal EnableDelayedExpansion
FOR /l %%N in (%first%, 1, %last%) do (
    set "n=0000000000000%%N"
    set "padded=!n:~-%len%!
    echo !padded!
)

答案4

使用ZtreeWin,按 導航到正確的目錄\,然後按Enter進入目錄,您可以在其中CtrlT標記要重新命名的文件,然後CtrlR將它們重新命名為????<0>*.*

例如:

foo-0-bar.jpg -> foo-00-bar.jpg
foo-1-bar.jpg -> foo-01-bar.jpg
foo-2-bar.jpg -> foo-02-bar.jpg
...

在上面的範例中,????代表前 4 個字元 (foo-),<0>在第 5 個位置插入零,並*.*代表檔案名稱的其餘部分 (-bar.jpg),該部分將保持不變。

標記您的文件:

在此輸入影像描述

重新命名您的檔案:

在此輸入影像描述

ZTreeWin是一款功能強大的 32 位元和 64 位元文字模式檔案和目錄管理器,其模型與傳奇的 XTreeGold(tm) 密切相關,但針對當今流行的作業系統進行了增強。

相關內容