重命名所有子目录中的文件名

问题描述 投票:0回答:1

我正在尝试重命名以字符串

p-01-
开头的所有文件夹中的所有文件。

这是根目录中文件夹和文件结构的简短示例:

P-79-23 - 01. PA
P-79-23 - 02-2. PS
P-79-23 - 02. PK

P-79-23 - 01.PA 目录

01. P-79-23 - 01.PA (IDR)
02. P-79-23 - 01.PA (iIDR)
03. P-79-23 - 01.PA (iiIDR)
P-01-23 - 01.PA-TK.docx
P-01-23 - 01.PA.xlsx
P-01-23 - 01.PA-Txt.docx
P-01-23 - 01.PA-txt.xlsx

更改文件名

P-01-23 - 01.PA-TK.docx  -->  P-79-23 - 01.PA-TK.docx

我正在使用此脚本的修改版

这是我的版本:

@echo on
chcp 65001 >NUL
setlocal EnableExtensions DisableDelayedExpansion

rem // Define constants here:
set "ROOT=%~dp0"
set "PATTERN=*p-01-*.*"
set "SEARCH=p-01-"
set "REPLAC=P-99-"

for /R "%ROOT%" %%I in ("%PATTERN%") do (
set "FILENAME=%%~nI"
setlocal EnableDelayedExpansion
set "FILENAME=!FILENAME:%SEARCH%=%REPLAC%!"
rename "%%~fI" "!FILENAME!%~xI"
endlocal
)

endlocal
exit /B

脚本不做任何事情。日志输出:

d:\test>chcp 65001  1>NUL 
d:\test>setlocal EnableExtensions DisableDelayedExpansion 
d:\test>rem // Define constants here: 
d:\test>set "ROOT=d:\test\" 
d:\test>set "PATTERN=*p-01-*.*" 
d:\test>set "SEARCH=p-01-" 
d:\test>set "REPLAC=P-99-" 
d:\test>    rename "%~fI" "!FILENAME!!%~xI"

我做错了什么?

batch-file
1个回答
0
投票

我不是编程专家,我是业余爱好者,但我正在努力。 我还是不知道原来的代码错误在哪里,我很想知道哪里出错了。 下面是有效的代码,在阅读教程和其他示例之后,与初始代码相比,它已经发生了很大的变化。

@echo off
setlocal enabledelayedexpansion

set "start_folder=%~dp0"
set "search=p-88-"
set "replac=p-55-"

for /r "%start_folder%" %%F in (*) do (
set "filename=%%~nxF"
set "fullpath=%%~dpF"

set "newname=!filename:%search%=%replac%!"

if not "!newname!"=="!filename!" (
    ren "!fullpath!!filename!" "!newname!"
)
)

endlocal

代码现在可以运行了。 您可以更改“搜索”和“替换”参数。 我希望这段代码对某人有用。

“知识不是知道的知识,而是给予的知识。”

© www.soinside.com 2019 - 2024. All rights reserved.