Question

J'aime créer un fichier batch (winxp cmd) qui va récursive dans un dossier choisi et des sous-dossiers et fichiers renomme y + dossiers avec les règles suivantes:

à partir de tous les noms de fichiers + dossier, majuscules en minuscules + « V » et les lettres « W » doivent être remplacés par des lettres « Y » et « Z ».

par exemple. 11V0W doit devenir 11Y0Z.

Je crois que son possible avec FOR / R, mais comment? Je pense qu'il faut être un sous-programme à appeler qui vérifie chaque lettre un par un, en plus de récursion de base avec FOR / R.

Était-ce utile?

La solution

Le lot suivant le fait pour les noms de fichiers au moins. Les répertoires sont un peu plus compliqué (je ne pouvais au moins trouver une solution à ce jour non infinie):

@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

Mais en théorie, il ne devrait pas être trop difficile à virer de bord dir renommant sur ce sujet.

Autres conseils

Tom, bidouiller avec un script précédent que j'ai posté, voici un traitement tous les fichiers et sous-répertoires:

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

___ Remarques ____ Ceci est un script non destructif, retirez le echo des commandes correctes pour renommer un fichier / répertoire. ( mouvement d'écho et echo ren )

Set = Remplace: Définissez cette variable à ce que les paires vous besoin changé.

set startdir =: Je voulais obtenir, en quelque sorte, l'argument et ne prenant que le chemin de celui-ci. Si un fichier est donné comme paramètre, le répertoire entier du conteneur et subdirs seront traitées.

if "% ~ 1" == "% startdir: ~ 0, -1%" exit / b 0 Cette ligne a été placé pour arrêter le répertoire d'argument lui-même d'être traitée. Si vous le souhaitez, supprimez cette ligne.
Si le script est appelé avec, disons, c: \ temp \ , suppression de cette ligne changerait le nom c:. \ GETE \ à la fin

avec cet arbre de répertoire:

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

renamer commandes:

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

produirait cette sortie:

.
├── 00Y0Z
│   ├── 12Y0Z
│   ├── 12Y0d
│   └── 12d0Z
├── 11Y0Z
├── 11Y0d
└── 11d0Z
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top