我需要在所有子目录中找到给定文件 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 窗口运行此命令