如何重命名多个子目录中的给定 123.txt 文件以将文件夹名称添加到该文件

如何重命名多个子目录中的给定 123.txt 文件以将文件夹名称添加到该文件

我需要在所有子目录中找到给定文件 123.txt,然后将特定子目录的名称添加到该文件。甚至强制 bat 文件在每次运行时覆盖现有文件。例如:-folder --subfolder1 ---123.txt --subfolder2 ---123.txt 总而言之,给定文件 123.txt 位于许多子目录中。我希望将所有 123.txt 文件重命名为新文件(每次都覆盖),并在其中添加文件夹名称(用破折号分隔)。所以我需要这样的文件 --subfolder1 ---subfolder1-123.txt --subfolder2 ---subfolder2-123.txt 请帮忙。请提供一个执行此操作的批处理文件。

答案1

我可能会做这样的事情:对所有文件夹进行递归循环,检查是否存在名为 123.txt 的文件,如果存在,则重命名它。请注意,~n返回变量中包含的目录的名称部分%%d

将以下内容保存到具有扩展名的文件中.bat,并从 123 个文件所在的目录运行它。

@echo off
for /r /d %%d in (*.*) do (    
    if exist "%%d\123.txt" ( 
        rename "%%d\123.txt" "%%~nd-123.txt"
    )
)

或者作为直接从命令提示符运行的单行程序(注意单个%字符):

for /r /d %d in (*.*) do (if exist "%d\123.txt" rename "%d\123.txt" "%~nd-123.txt")

for /?可以通过在命令提示符下输入来阅读上述大部分内容的帮助。

答案2

以下是 PowerShell 的替代方案:

gci C:\somewhere -r -filter 123.txt | % { rni $_.FullName -NewName ( "$( split-path (split-path $_.FullName -parent) -leaf )-123.txt" ) }

您可以将路径更改gci为最顶层目录,它将在每个子文件夹中查找 123.txt,并将其重命名为 parentfolder-123.txt

从 PowerShell 窗口运行此命令

相关内容