>

새로운 규칙과 일치하도록 이름을 바꾸려는 수백 개의 파일이 있습니다. 현재 컨벤션은 AA.BBBB.XXX입니다. BBBB.AA.XXX로 변경하고 싶습니다

이 파일들을 모두 담고있는 폴더에 들어갔습니다. 단순히 파일을 반복하고 파일 이름을 재구성하는 데 필요한 하위 문자열을 가져올 수 있다고 생각했습니다. 문제는 에코 될 때 % name %이 (가) 비어있는 것 같습니다.

for %%f in (*) do (
    set name=%%f
    set arr=%name:~0,3%
    set sta=%name:~3,5%
    set rest=%name:~8,26%
    set new=%sta%%arr%%rest%
    echo f: %%f
    echo name: %name%
    echo arr: %arr%
    echo sta: %sta%
    echo rest: %rest%
    echo new: %new%
    set
    pause
)

아래에서 'set'이라고 부르는 것처럼이 변수로 무슨 일이 일어나고 있는지 알 수 있습니다. % name %이 (가) 예상 한 것과 같음을 표시하지만 에코 될 때 비어 있고 다른 변수 할당이 % name %에서 하위 문자열을 가져올 수 없습니다.

  • 답변 # 1

    협약의 점이 문자 그대로인 경우,
    그것들을 사용하여 이름을 for /f 로 나눌 수 있습니다  부품을 다시 주문하십시오.

    편집 : Compos 힌트로 인해 RegEx와의 규칙을 확인하는 반복이 변경되었습니다

    :: Q:\Test\2019\05\23\SO_56266054.cmd
    @Echo off
    PushD "A:\Test"
    For /f "delims=" %%F in ('Dir /B "??.????.*"^|findstr "^..\.....\.*"'
      ) do For /F "tokens=1,2*delims=." %%A in ("%%F"
        ) Do Echo Ren "%%F" "%%B.%%A.%%C"
    PopD
    
    

    출력이 올 바르면 에코를 제거하십시오.

    샘플 출력 :

    > Q:\Test\2019\05\23\SO_56266054.cmd
    Ren "AA.BBBB.XXX" "BBBB.AA.XXX"
    Ren "CC.DDDD.YYYY" "DDDD.CC.YYYY"
    Ren "EE.FFFF.ZZZZZ" "FFFF.EE.ZZZZZ"
    
    

  • 답변 # 2

    지연된 확장을 사용하는 한 가지 아이디어가 있습니다 :

    @Echo Off
    For /F Delims^=^ EOL^= %%A In ('Where ".:??.????.???" 2^>NUL') Do (
        Set "_=%%~nA"
        SetLocal EnableDelayedExpansion
        Ren "%%A" "!_:~-4!.!_:~,2!%%~xA"
        EndLocal
    )
    
    

  • 답변 # 3

    약간 어색하면 접근 방법이 좋습니다.

    그러나 지연 확장이 필요하고 ! 를 사용해야한다고 생각합니다.   % 대신

    setlocal enabledelayedexpansion
    for %%f in (*) do (
        set name=%%f
        set arr=!name:~0,3!
        set sta=!name:~3,5!
        set rest=!name:~8,26!
        set new=!sta!!arr!!rest!
        echo f: %%f
        echo name: !name!
        echo arr: !arr!
        echo sta: !sta!
        echo rest: !rest!
        echo new: !new!
        set
        pause
    )
    
    

관련 자료

  • 이전 python - Tensorflow 확장 파이프 라인이있는 TF- 라이트 컨버터 (시카고 택시 파이프 라인 예)
  • 다음 javascript - ID가 동일한 경우 배열 객체 값을 배열에 병합하는 방법