提问人:Szopri Szabolcs 提问时间:9/12/2023 最后编辑:CompoSzopri Szabolcs 更新时间:9/13/2023 访问量:48
将子目录中的多个文件重命名为其父子目录名称的一部分
Rename multiple files within subdirectories to part of their parent subdirectory name
问:
我想以递归方式将子目录中的多个文件重命名为其父子目录名称的一部分
示例来自:
C:\abc\test1.noxz\wwww.xz
C:\abc\test2.noxz\ccc.xz
示例:
c:\abc\test1.noxz\test1.xz
c:\abc\test2.noxz\test2.xz
我尝试过一个批处理文件,但结果是,不是。C:\abc
test1.noxz.xz
test1.xz
@echo off
@for /r /d %%x in (*) do @for %%y in (xz) do @ren "%%x\*.%%y" "%%~nxx.%%y" 2> NUL
我需要更改什么才能解决此问题?
答:
1赞
Magoo
9/13/2023
#1
@ECHO OFF
SETLOCAL
rem The following setting for the directory is a name
rem that I use for testing and deliberately includes spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.
SET "sourcedir=u:\your files"
FOR /r "%sourcedir%" %%e IN (*.xz) DO (
FOR %%o IN ("%%~dpe.") DO ECHO REN "%%e" "%%~no%%~xe"
)
GOTO :EOF
在应用于实际数据之前,请始终根据测试目录进行验证。
所需的 任 命令仅用于测试目的。验证命令正确后,更改为 以实际重命名文件。ECHO
ECHO REN
REN
该命令将与子树中找到的掩码匹配的每个完整文件名分配给 。for /r
*.xz
%%e
%%~dpe.
然后是父目录的名称,删除了终端反斜杠 - 看起来像文件名。选择 的名称部分和扩展名(将是 )以形成新文件名。%%o
%%e
.xz
您还可以在 和 之间添加以仅过滤名为 ( = 不区分大小写的) 的子目录if /i "%%~xo"==".noxz"
do
echo
.noxz
if /i
评论
@For /D %%G In (*) Do @For %%H In ("%%G\*.xz") Do @Ren "%%H" "%%~nG%%~xH" 2>NUL
.noxz
C:\abc