トム、私が投稿した以前のスクリプトをいじっています。これは、すべてのファイルとサブディレクトリを処理するスクリプトです。
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
___注意____
これは非破壊的なスクリプトです。ファイル/ディレクトリの名前を変更するには、正しいコマンドからエコーを削除してください。(エコームーブとエコーレン)
Replaces=を設定: この変数を、変更が必要なペアに設定します。
set Startdir=:どうにかして、引数を保護し、そこからパスのみを取得したかったのです。ファイルがパラメータとして与えられた場合、コンテナ ディレクトリ全体とサブディレクトリが処理されます。
if "%~1"=="%StartDir:~0,-1%" exit /b 0:この行は、引数ディレクトリ自体が処理されないようにするために配置されました。必要に応じて、この行を削除してください。
スクリプトがたとえばc:\temp\で呼び出された場合、この行を削除すると、最終的に名前がc:\teAp\に変更されます。