我喜欢创建一个批处理文件(操作系统CMD),该递归经过一个选择的文件夹和子文件夹和重命名文件有+文件夹的规则如下:

从所有文件+文件夹名称,所有大写+小写“V”和“W”的字母需要与字母“Y”和“Z”来代替。

e.g。 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

但理论上它不应该是太难钉目录重命名到该

其他提示

汤姆,与以前的剧本我张贴摆弄周围,这里是一个处理所有文件和子目录:

<强> 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

<强> ___注释____ 结果 这是一个非破坏性的脚本,取出的回声以重命名任何文件/目录从正确的命令。 (的回波移动和<强>回声仁

设置替代对象= 设置此变量可以任何对你需要改变。

设置STARTDIR = 我想确保,不知何故,参数和从它仅取的路径。如果一个文件被作为参数,整个容器目录和子目录将被处理。

如果 “%〜1” == “%STARTDIR:〜0,-1%” 退出/ 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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top