Frage

Ich mag eine Batch-Datei erstellen (winxp cmd), das geht rekursiv durch einen Ordner wählen und Unterordner und benennt es Dateien + Ordner mit den folgenden Regeln:

aus allen Datei + Ordnernamen, die alle Groß + Kleinbuchstabe „V“ und „W“ Buchstaben müssen mit den Buchstaben „Y“ und „Z“ ersetzt werden.

z. 11V0W muss 11Y0Z werden.

Ich glaube, sein mögliches mit FOR / R aber wie? Ich denke, es muss ein Unterprogramm wird genannt werden, die jeden Buchstaben einzeln zusätzlich zu dem Grunde Rekursion mit FOR / R prüft.

War es hilfreich?

Lösung

Der folgende Batch tut dies für die Dateinamen zumindest. Verzeichnisse sind ein bisschen schwieriger (zumindest konnte ich nicht mit einer nicht-unendlichen Lösung kommt bisher):

@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

Aber in der Theorie sollte es nicht allzu schwierig sein, dir zu heften diese Umbenennung auf.

Andere Tipps

Tom, das Hantieren mit einem frühen Skript, das ich geschrieben, hier ist eine Verarbeitung aller Dateien und Unterverzeichnisse:

recurename.cmd Verzeichnis

@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

___ Hinweise ____
Dies ist ein nicht-destruktiv Skript, entfernen Sie die echo aus den richtigen Befehle, um jede Datei / Verzeichnis zu umbenennen. ( echo bewegen und echo ren )

Set auslöst =: Setzen Sie diese Variable auf, was Paare Sie müssen geändert.

gesetzt Startdir =: Ich wollte, irgendwie sichern, das Argument und nur den Weg von mitnimmt. Wenn ein Datei als Parameter angegeben wird, werden das gesamte Container-Verzeichnis und subdirs verarbeitet werden.

, wenn "% ~ 1" == "% startdir: ~ 0, -1%" exit / b 0: wurde diese Zeile platziert das Argument Verzeichnis zu stoppen von selbst verarbeitet wird. Wenn Sie möchten, entfernen Sie diese Zeile.
Wenn das Skript aufgerufen wird mit, sagen wir, c: \ temp \ , diese Zeile zu entfernen würde den Namen c:. \ TEAP \ am Ende

Mit diesem Verzeichnisbaum:

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

Renamer Befehle:

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

würde diese Ausgabe erzeugen:

.
├── 00Y0Z
│   ├── 12Y0Z
│   ├── 12Y0d
│   └── 12d0Z
├── 11Y0Z
├── 11Y0d
└── 11d0Z
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top