我正在尝试找到一个可以在 Windows 中运行的脚本,并在文件夹中的所有文件前面加上包含文件夹名称的前缀。
例如文件夹中C:\FolderName1
有3个文件:
hello.jpg
test.txt
monday.docx
对上述文件运行脚本后,其名称将如下所示:
FolderName1 - hello.jpg
FolderName1 - test.txt
FolderName1 - monday.docx
我不介意这是用哪种脚本语言来实现的,但我还没有在任何地方找到解决方案。
提前致谢。
答案1
有多少个文件夹?如果只有一个,你可以用一个for
循环重命名所有文件:
- 创建
C:\FolderName1_out
文件夹 - 打开 CMD 提示符
for %I in (C:\FolderName1\*) do echo rename "C:\FolderName1\%~nxI" "C:\FolderName1_out\FolderName1 - %~nxI"
- 如果重命名计划似乎正确,请
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
到命令末尾即可查看潜在结果,而不会实际破坏数据:)