문제

나는 선택 폴더와 하위 폴더를 재귀 적으로 사용하여 다음 규칙을 가진 파일+폴더를 이름 바꾸는 배치 파일 (Winxp CMD)을 만들고 싶습니다.

모든 파일 + 폴더 이름에서 모든 대문자 + 소문자 "V"및 "W"문자를 문자 "y"및 "z"로 바꿔야합니다.

예 : 11V0W는 11Y0Z가되어야합니다.

나는 그것이 /r에 가능하다고 생각하지만 어떻게? 나는 /r의 기본 재귀 외에 각 문자를 하나씩 점검하는 서브 루틴이 필요하다고 생각합니다.

도움이 되었습니까?

해결책

다음 배치는 최소한 파일 이름에 대해이 작업을 수행합니다. 디렉토리는 약간 까다 롭습니다 (적어도 지금까지 비-인 나이트 솔루션을 제시 할 수 없었습니다).

@echo off
setlocal enableextensions
for /r %%f in (*) do call :process "%%f"
endlocal
goto :eof

:process
pushd "%~dp1"
set fn=%~nx1
set fn=%fn:V=Y%
set fn=%fn:W=Z%
ren "%~nx1" "%fn%"
popd
goto :eof

그러나 이론적으로는 이것에 대한 이름을 바꾸는 것이 너무 어렵지 않아야합니다.

다른 팁

Tom, 내가 게시 한 이전 스크립트를 다루고 있습니다. 여기에 모든 파일과 하위 디렉토리를 처리하는 것 중 하나가 있습니다.

recurename.cmd 예배 규칙서

@echo off
setlocal ENABLEDELAYEDEXPANSION
set Replaces="V=Y" "W=Z" "m=A"
set StartDir=%~dp1
call :RenameDirs "%StartDir:~0,-1%"
exit /b 0
:RenameDirs
    call :RenameFiles "%~1"
    for /f "delims=" %%d in ('dir /ad /b "%~1"2^>nul') do call :RenameDirs "%~1\%%~d"
    if "%~1"=="%StartDir:~0,-1%" exit /b 0
    set _pos=0
    set _dir=%~f1
    set _dir_orig=!_dir!
    :finddirName
        set /a _pos-=1
        call set _dir_pos=!!!_dir:~%_pos%,1!!!
        if not "%_dir_pos%"=="\" goto finddirName
        call set _origines=!!!_dir:~0,%_pos%!!!
        set /a _pos+=1
        call set _dir=!!!_dir:~%_pos%!!!
    for %%r in (%Replaces%) do call set _dir=!!!_dir:%%~r!!!
    if /i not "!_dir!"=="!_dir_orig!" echo move "%~1" "%_origines%\!_dir!"
    exit /b 0
:RenameFiles
    for /f "delims=" %%f in ('dir /a-d /b "%~1"2^>nul') do (
        set _file=%%~nf
        set _file_orig=!_file!
        for %%r in (%Replaces%) do call set _file=!!!_file:%%~r!!!
        if /i not "!_file!"=="!_file_orig!" echo ren "%~1\%%f" "%~1\!_file!%%~xf"
    )
    exit /b 0

___메모____
이것은 비파괴적인 스크립트입니다 에코 파일/디렉토리의 이름을 바꾸려면 올바른 명령에서 (에코 이동 그리고 에코 렌)

set set groplaces = : 이 변수를 변경 해야하는 쌍으로 설정하십시오.

set startDir = : 나는 어떻게 든 논쟁을 지키고 그로부터 길을 가고 싶었다. 파일이 매개 변수로 제공되면 전체 컨테이너 디렉토리 및 하위 디어가 처리됩니다.

"%~ 1"== "%"startDir : ~ 0, -1%"exit /b 0 : 0 : 이 줄은 인수 디렉토리 자체가 처리되는 것을 막기 위해 배치되었습니다. 원한다면이 라인을 제거하십시오.
스크립트가 호출되면 C : temp,이 줄을 제거하면 이름이 변경됩니다 C : teap 결국.

이 디렉토리 트리로 :

.
├── 00v0w
│   ├── 12V0W
│   ├── 12d0w
│   └── 12v0d
├── 11V0W
├── 11d0w
└── 11v0d

이것들 렌즈 명령 :

$ renamer --regex --find '[vV]' --replace 'Y' '**'
$ renamer --regex --find '[wW]' --replace 'Z' '**'

이 출력을 생성합니다.

.
├── 00Y0Z
│   ├── 12Y0Z
│   ├── 12Y0d
│   └── 12d0Z
├── 11Y0Z
├── 11Y0d
└── 11d0Z
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top