Batch FOR 루프에서 숫자를 0으로 채우려면 어떻게 해야 합니까?

Batch FOR 루프에서 숫자를 0으로 채우려면 어떻게 해야 합니까?

내 건물에 있는 원격 컴퓨터에서 일부 작업을 수행하기 위해 배치 파일을 작성 중입니다. 모두 동일한 접두사로 이름이 지정되지만 끝의 숫자가 변경됩니다(01-65). 나는 숫자를 기반으로 배치 파일 루프를 생성하기 위한 온라인 튜토리얼을 따르려고 노력했고 다음과 같은 결과를 얻었습니다.

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

이것은 10에 도달한 후에는 두 자리 숫자이므로 훌륭하게 작동합니다. 나에게 필요한 것은 이름 지정 스키마와 일치하는 숫자가 1-9로 표시되는 것 입니다. 01-09본질적으로 처음 9번의 반복에는 앞에 0이 붙는 한 자리 숫자가 필요합니다.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원하는 길이로 0을 만든 다음 하위 문자열 작업을 사용하여N가장 오른쪽 숫자.

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

이 솔루션을 사실상 원하는 개수의 선행 0으로 쉽게 확장할 수 있습니다.

답변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수 있는 디렉토리를 입력하고 이름을 다음으로 바꾸십시오.CtrlTCtrlR????<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번째 위치에 0을 삽입하고, *.*변경되지 않은 파일 이름(-bar.jpg)의 나머지 부분을 나타냅니다.

파일에 태그 지정:

여기에 이미지 설명을 입력하세요

파일 이름 바꾸기:

여기에 이미지 설명을 입력하세요

ZTreeWin강력한 32비트 및 64비트 텍스트 모드 파일 및 디렉토리 관리자로, 전설적인 XTreeGold(tm)를 밀접하게 모델로 삼았지만 오늘날 널리 사용되는 운영 체제에 맞게 향상되었습니다.

관련 정보