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

时间:2014-01-02 00:58:21

标签: windows powershell filenames prefix batch-rename

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

8 个答案:

答案 0 :(得分:114)

选项1:使用Windows PowerShell

打开Windows菜单。 键入:“PowerShell”并打开“Windows PowerShell”命令窗口。

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

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

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

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

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

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

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

dir | Rename-Item -NewName {$_.Directory.Name + " - " + $_.Name}

选项2:使用命令提示符

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

for %a in (*.*) do ren "%a" "prefix - %a"

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

答案 1 :(得分:26)

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

Get-ChildItem -Exclude "house chores-*" | rename-item -NewName { "house chores-" + $_.Name }

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

答案 2 :(得分:12)

自由软件“Bulk Rename Utility”也运行良好(并且对于高级任务也很强大)。 Download并且安装需要一分钟。

在原始网站上查看screenshotstutorial

-

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

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

答案 3 :(得分:11)

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

Get-ChildItem | rename-item -NewName { "house chores-" + $_.Name }

答案 4 :(得分:1)

基于@ ofer.sheffer回答此命令将批量重命名,将当前日期附加到文件名。即“file.txt”对于当前文件夹中的所有文件变为“20180329 - file.txt”

for %a in (*.*) do ren "%a" "%date:~-4,4%%date:~-7,2%%date:~-10,2% - %a"

答案 5 :(得分:1)

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

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

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

Dave.Gugg使用-Exclude的技巧也应解决此问题,但这是另一种方法。也许,如果要重命名的文件已经包含前缀中使用的模式。

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

答案 6 :(得分:0)

我知道这是一个老问题,但我从各种答案中学到了很多,但我提出了自己的解决方案。这应该动态地将父文件夹作为前缀添加到与特定模式匹配的所有文件中,但前提是它已经没有该前缀。

function Add-DirectoryPrefix($pattern) {
    # To debug, replace the Rename-Item with Select-Object
    Get-ChildItem -Path .\* -Filter $pattern -Recurse | 
        Where-Object {$_.Name -notlike ($_.Directory.Name + '*')} | 
        Rename-Item -NewName {$_.Directory.Name + '-' + $_.Name}
        # Select-Object -Property Directory,Name,@{Name = 'NewName'; Expression= {$_.Directory.Name + '-' + $_.Name}}
}

https://gist.github.com/kmpm/4f94e46e569ae0a4e688581231fa9e00

答案 7 :(得分:0)

基于@ ofer.sheffer的答案,这是用于添加词缀的CMD变体(这不是问题,但是如果您搜索词缀,则该页面仍是Google排名第一的搜索结果)。由于扩展而有所不同。

for %a in (*.*) do ren "%~a" "%~na-affix%~xa"

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