将子目录中的多个文件重命名为其父子目录名称的一部分

Rename multiple files within subdirectories to part of their parent subdirectory name

提问人:Szopri Szabolcs 提问时间:9/12/2023 最后编辑:CompoSzopri Szabolcs 更新时间:9/13/2023 访问量:48

问:

我想以递归方式将子目录中的多个文件重命名为其父子目录名称的一部分

示例来自:

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:\abctest1.noxz.xztest1.xz

@echo off
@for /r /d %%x in (*) do @for %%y in (xz) do @ren "%%x\*.%%y" "%%~nxx.%%y" 2> NUL

我需要更改什么才能解决此问题?

for-loop 批处理文件 重命名

评论

2赞 Compo 9/12/2023
您的示例似乎不需要递归,请更好地向我们解释您的环境。以下不带递归,应提供您在示例中列出的结果。@For /D %%G In (*) Do @For %%H In ("%%G\*.xz") Do @Ren "%%H" "%%~nG%%~xH" 2>NUL
1赞 Compo 9/12/2023
我上面的例子没有放在新的文件名中!我提供的非递归代码,作为保存在 中的单行批处理文件,只需在 Windows 资源管理器中双击即可完成预期的操作。此外,还有一个“编辑”按钮;请使用它来提供上述评论中的信息,并请包含信息以解释您自己如何调用此批处理文件。.noxzC:\abc
0赞 Szopri Szabolcs 9/13/2023
您的代码适用于所提供的示例。但是,如果我有子\子文件夹,例如:“c:\abc\def\ghi\test3.noxz\kkkk.xz”并且我从“c:\abc”文件夹运行bat文件,则不起作用,那么结果应该是:“c:\abc\def\ghi\test3.noxz\test3.xz”。(视窗11)

答:

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

在应用于实际数据之前,请始终根据测试目录进行验证。

所需的 任 命令仅用于测试目的。验证命令正确后,更改为 以实际重命名文件。ECHOECHO RENREN

该命令将与子树中找到的掩码匹配的每个完整文件名分配给 。for /r*.xz%%e

%%~dpe.然后是父目录的名称,删除了终端反斜杠 - 看起来像文件名。选择 的名称部分和扩展名(将是 )以形成新文件名。%%o%%e.xz

您还可以在 和 之间添加以仅过滤名为 ( = 不区分大小写的) 的子目录if /i "%%~xo"==".noxz"doecho.noxzif /i