使用文件夹作为文件名前缀的脚本

使用文件夹作为文件名前缀的脚本

我正在尝试找到一个可以在 Windows 中运行的脚本,并在文件夹中的所有文件前面加上包含文件夹名称的前缀。

例如文件夹中C:\FolderName1有3个文件:

hello.jpg
test.txt
monday.docx

对上述文件运行脚本后,其名称将如下所示:

FolderName1 - hello.jpg
FolderName1 - test.txt
FolderName1 - monday.docx

我不介意这是用哪种脚本语言来实现的,但我还没有在任何地方找到解决方案。

提前致谢。

答案1

有多少个文件夹?如果只有一个,你可以用一个for循环重命名所有文件:

  1. 创建C:\FolderName1_out文件夹
  2. 打开 CMD 提示符
  3. for %I in (C:\FolderName1\*) do echo rename "C:\FolderName1\%~nxI" "C:\FolderName1_out\FolderName1 - %~nxI"
  4. 如果重命名计划似乎正确,请echo从上面的命令中删除并再次运行

如果有很多文件夹,那么您可以创建批处理文件(将所有 % 替换为 %%,将 FolderName1 替换为 %1)并多次运行,将文件夹名称作为参数传递。您甚至可以在 for 循环中运行该批处理文件:

for /D %J in (*) do echo call my_batch.cmd %~nxJ

如果输出看起来正确,则删除echo并再次运行。

答案2

使用 PowerShell。如果您只需要在一个文件夹中更改文件名,请使用以下命令:

gci c:\PathToFolder | Where {$_.psIsContainer -eq $false} | Rename-Item -NewName {$_.Directory.Name + " - " + $_.Name}

它将更改该文件夹中的所有文件(但不包括重命名文件夹)的格式PathToFolder - 文件名

-Recurse如果有嵌套文件夹,您可以添加:

gci c:\PathToParentFolder -Recurse | Where {$_.psIsContainer -eq $false} | Rename-Item -NewName {$_.Directory.Name + " - " + $_.Name}

请务必先在测试文件夹上运行,或者只需添加-WhatIf到命令末尾即可查看潜在结果,而不会实际破坏数据:)

相关内容