我喜欢创建一个批处理文件(winxp cmd),它递归地遍历选择的文件夹和子文件夹,并使用以下规则重命名文件+文件夹:
从所有文件+文件夹名称中,所有大写+小写“V”和“W”字母都需要替换为字母“Y”和“Z”。
例如 11V0W 必须变成 11Y0Z。
我相信它可能与 FOR /R 但如何?我认为除了使用 FOR / R 进行基本递归之外,还需要调用一个子例程来逐个检查每个字母。
我喜欢创建一个批处理文件(winxp cmd),它递归地遍历选择的文件夹和子文件夹,并使用以下规则重命名文件+文件夹:
从所有文件+文件夹名称中,所有大写+小写“V”和“W”字母都需要替换为字母“Y”和“Z”。
例如 11V0W 必须变成 11Y0Z。
我相信它可能与 FOR /R 但如何?我认为除了使用 FOR / 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
但从理论上讲,将 dir 重命名到此应该不会太难。
汤姆,摆弄我之前发布的一个脚本,这是一个处理所有文件和子目录的脚本:
reurename.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
___Notes____
这是一个非破坏性脚本,从正确的命令中删除回显以重命名任何文件/目录。(回声移动和回声仁)
Set Replaces=:将此变量设置为您需要更改的任何对。
设置 Startdir=:我想以某种方式保护论点并仅从中获取路径。如果将文件作为参数给出,则将处理整个容器目录和子目录。
if "%~1"=="%StartDir:~0,-1%" exit /b 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