重命名文件夹中的多个文件,添加前缀(Windows)

ofe*_*fer 65 windows powershell filenames prefix batch-rename

我想批量重命名文件夹中的文件,将文件夹的名称添加到新名称前面.即C:\house chores\所有文件都将被重命名house chores - $old_name.

ofe*_*fer 123

选项1:使用Windows PowerShell

打开Windows菜单.键入:"PowerShell"并打开"Windows PowerShell"命令窗口.

带有所需文件的转到文件夹:例如cd"C:\ house chores"注意:如果涉及空格,地址必须包含引号"".

您可以使用'dir'查看文件夹中的所有文件.使用'|' 将为后面的命令输出'dir'的输出.

注意:'dir'是'Get-ChildItem'的别名.请参阅:wiki:cmdlet.可以提供进一步的功能.例如'dir -recurse'输出所有文件,文件夹和子文件夹.

如果我只想要一系列文件怎么办?

而不是'dir |' 我可以用:

dir | where-object -filterscript {($_.Name -ge 'DSC_20') -and ($_.Name -le 'DSC_31')} |
Run Code Online (Sandbox Code Playgroud)

对于使用目录名作为前缀进行批量重命名:

dir | Rename-Item -NewName {$_.Directory.Name + " - " + $_.Name}
Run Code Online (Sandbox Code Playgroud)

选项2:使用命令提示符

在文件夹中按shift +右键单击:选择'open command-window here'

for %a in (*.*) do ren "%a" "prefix - %a"
Run Code Online (Sandbox Code Playgroud)

如果有很多文件,最好在此之前添加'@echo off'命令,最后添加'echo on'命令.

  • 选项2(在添加缺少的`do`之后)不起作用 - 在重命名某些文件之后,`for`在新名称下找到它们,一次又一次地添加前缀,直到达到文件名长度限制. (8认同)
  • @billgates他的回答中缺少"do"这个词.它应该是`for%a in(.)do ren"%a""prefix - %a"` (4认同)
  • (.)在Windows 8上失败了,尝试(*)代替. (4认同)
  • 当使用选项2时,我得到了'此时出乎意料的想法.任何想法为什么? (2认同)
  • @SergeyVlasov在两个选项中都会发生这种情况。避免这种情况的唯一方法是将重命名放置在原始名称的上方。或者在重命名后将其移动到其他文件夹。 (2认同)

Dav*_*ugg 30

这里的两个Powershell答案的问题在于前缀最终可能会被复制,因为在重命名之前和之后,脚本可能会在文件上运行,具体取决于重命名过程运行时所采用的目录.要解决这个问题,只需使用-Exclude选项:

Get-ChildItem -Exclude "house chores-*" | rename-item -NewName { "house chores-" + $_.Name }
Run Code Online (Sandbox Code Playgroud)

这将阻止进程多次重命名任何一个文件.


小智 15

自由软件' 批量重命名实用程序 '也运行良好(并且对于高级任务也很强大).下载和安装需要一分钟.

查看原始网站上的屏幕截图教程.

-

我无法提供逐步截图,因为图像必须在Creative Commons License发布,而且我不拥有该软件的屏幕截图.

免责声明:我与该软件/公司无任何关联.我喜欢这个产品用于我自己的任务,它提供OP和类似的要求,因此推荐.


小智 10

这对我有用,首先在要更改文件名的目录中使用cd,然后运行以下命令:

Get-ChildItem | rename-item -NewName { "house chores-" + $_.Name }
Run Code Online (Sandbox Code Playgroud)

  • 这会导致无限循环,直到文件名达到Windows限制.而是使用@ Dave.Gugg的回复:http://stackoverflow.com/a/372​​79979/2179408 (4认同)

pha*_*99w 7

我正在撕扯我的头发,因为对于某些项目,重命名的项目会再次重命名(重复,除非达到最大文件名长度)。Get-ChildItem 和管道输出 dir 都发生了这种情况。我想重命名的文件是由于字母顺序的变化而被提取的。我通过以下方式解决了这个问题:

Get-ChildItem -Path . -OutVariable dirs
foreach ($i in $dirs) { Rename-Item $i.name ("<MY_PREFIX>"+$i.name) }
Run Code Online (Sandbox Code Playgroud)

这将 Get-ChildItem 返回的结果“锁定”在变量 $dirs 中,您可以对其进行迭代,而不必担心排序会改变或发生其他有趣的事情。

Dave.Gugg 使用 -Exclude 的提示也应该可以解决这个问题,但这是一种不同的方法;也许如果被重命名的文件已经包含前缀中使用的模式。

(免责声明:我非常喜欢 PowerShell n00b。)


小智 6

根据 @ofer.sheffer 的回答,这是用于添加词缀的 CMD 变体(这不是问题,但如果您搜索词缀,此页面仍然是排名第一的谷歌结果)。由于扩展名的原因,它有点不同。

for %a in (*.*) do ren "%~a" "%~na-affix%~xa"
Run Code Online (Sandbox Code Playgroud)

您可以更改“-affix”部分。