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

xxhby3vn  于 2023-06-24  发布在  Windows
关注(0)|答案(9)|浏览(160)

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

wz8daaqr

wz8daaqr1#

选项1:使用Windows PowerShell

打开窗口菜单。键入“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')} |

对于以目录名作为前缀的批处理重命名:

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

选项二:使用命令提示符

在文件夹中,按shift+右键单击:选择“在此处打开命令窗口”

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

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

gudnpqoy

gudnpqoy2#

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

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

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

qojgxg4l

qojgxg4l3#

自由软件'Bulk Rename Utility'也运行得很好(并且对于高级任务也很强大)。Download和安装需要一分钟。
参见原网站上的screenshotstutorial

我不能提供一步一步的屏幕截图,因为图像将不得不在Creative Commons License下发布,我不拥有该软件的屏幕截图。

  • 免责声明:* 我与上述软件/公司没有任何关系。我喜欢我自己的任务的产品,它服务OP的和类似的要求,因此推荐。
yqkkidmi

yqkkidmi4#

这对我来说很有效,首先在你想更改文件名的目录中打开cd,然后运行以下命令:

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

在线文档

5n0oy7gb

5n0oy7gb5#

我是撕裂我的头发,因为对于一些项目,重命名的项目将得到重命名再次(重复,除非最大文件名长度达到)。Get-ChildItem和dir的输出管道都发生了这种情况。我猜重命名的文件被拿起是因为字母顺序的变化。我用以下方法解决了这个问题:

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

这将Get-ChildItem返回的结果“锁定”在变量$dirs中,您可以对其进行迭代,而不必担心排序会改变或其他有趣的事情会发生。
Gugg关于使用-Exclude的提示也可以解决这个问题,但这是一种不同的方法;可能是在被重命名的文件已经包含前缀中使用的模式时。
(免责声明:我是一个PowerShell n 00 b。

b09cbbtk

b09cbbtk6#

基于@ofer.sheffer的回答,这是添加词缀的CMD变体(这不是问题,但如果你搜索词缀,这个页面仍然是谷歌的第一结果)。因为扩展的原因有点不同。

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

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

fhity93d

fhity93d7#

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

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

mxg2im7a8#

对于任何使用PowerShell的人,都有同样的要求(在目录中添加一个前缀),你可能会发现,如果你使用某种形式的...

Get-ChildItem ./ | Rename-Item -NewName {"prefix" + $_.Name}

...文件将不断地获得在循环中添加的前缀,直到达到windows文件名长度限制。因此,你得到的不是“prefixFile1.txt”:“prefixprefixprefixprefixprefixprefix...File1.txt”。原因是Get-ChildItem cmdlet将不断地将新命名的文件通过管道传送回Rename-Item cmdlet。
这个问题的解决方案还不错,只要使用PowerShell的子表达式运算符即可。

$(Get-ChildItem ./) | Rename-Item -NewName {"prefix" + $_.Name}

Get-ChildItem周围放置$()可以确保首先返回所有当前存在的文件,然后将其通过管道传输到Rename-Item中,而不是在没有子表达式操作符的情况下动态地通过管道传输。只要记住,如果你有数百万+文件/项目,因为它可能需要一段时间来迭代所有文件/项目,然后进行任何重命名。

2w2cym1i

2w2cym1i9#

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

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

相关问题