バッチ FOR ループで数値をゼロ埋めするにはどうすればよいですか?

バッチ FOR ループで数値をゼロ埋めするにはどうすればよいですか?

私は、建物内のリモート コンピューターでいくつかの操作を実行するバッチ ファイルを作成しています。それらはすべて同じプレフィックスで名前が付けられていますが、末尾の番号が変わります (01~65)。私は、数字に基づいてバッチ ファイル ループを作成するためのオンライン チュートリアルに従ってみましたが、次のような結果になりました。

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

これは 10 に達した後は 2 桁になるため、うまく機能します。必要なのは、命名スキーマに一致するように、数字が1-9として表示されることです01-09。基本的に、最初の 9 回の反復では、先頭の 0 の 1 桁が必要です。Windows バッチ ファイルを使用してこれを実現するにはどうすればよいですか?

答え1

投稿されたコードは、%HOSTNAMETOUSE%ステートメントが解析されるときに展開され、ループが実行される前に括弧で囲まれたブロック全体が 1 回のパスで解析されるため、おそらく機能しません。したがって、展開された値はすべての反復で一定です。

実行時に値を取得するには、遅延展開を使用する必要があります。

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

必要に応じて 0 をプレフィックスとして追加します。

0 が 1 つ以上必要になることはないので、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桁を超える場合は、これは便利ではありません。より一般的な解決策は、次の文字列を追加することです。希望の長さのゼロを削除し、部分文字列操作を使用して右端の数字。

@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は、伝説的な XTreeGold(tm) を忠実にモデル化した強力な 32 ビットおよび 64 ビットのテキスト モード ファイルおよびディレクトリ マネージャーですが、今日の一般的なオペレーティング システム向けに強化されています。

関連情報