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

重命名文件夹中的多个文件,添加前缀(Windows),windows,powershell,filenames,prefix,batch-rename,Windows,Powershell,Filenames,Prefix,Batch Rename,我想批量重命名文件夹中的文件,在新名称中添加文件夹名称的前缀。i、 e.C:\house chores\中的文件将全部重命名为house chores-$old\u name选项1:使用Windows PowerShell 打开windows菜单。 键入:“PowerShell”并打开“Windows PowerShell”命令窗口 转到包含所需文件的文件夹:例如cd“C:\house chores” 注意:若涉及空格,地址必须包含引号“” 您可以使用“dir”查看文件夹中的所有文件。使用“|”

我想批量重命名文件夹中的文件,在新名称中添加文件夹名称的前缀。i、 e.
C:\house chores\
中的文件将全部重命名为
house chores-$old\u name
选项1:使用Windows PowerShell

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

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

您可以使用“dir”查看文件夹中的所有文件。使用“|”将通过管道为后面的命令输出“dir”

注意:“dir”是“Get ChildItem”的别名。请参阅:。 可以提供进一步的功能。e、 “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键并单击鼠标右键:选择“在此处打开命令窗口”

for %a in (*.*) do ren "%a" "prefix - %a"
如果有很多文件,最好在此之前添加一个“@echo off”命令,然后在末尾添加一个“echo on”命令。

自由软件”也可以很好地工作(并且对于高级任务也很强大)。安装需要一分钟

在原始网站上查看和

--

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


免责声明:我与上述软件/公司没有任何关联。我喜欢用于我自己任务的产品,它满足OP和类似要求,因此建议使用。

这对我很有效,首先是目录中的cd,您要将文件名更改为,然后运行以下命令:

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

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

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

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

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

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}}
}

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

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

我当时非常紧张,因为对于某些项目,重命名的项目会再次重命名(重复,除非达到最大文件名长度)。Get ChildItem和dir的管道输出都发生了这种情况。我猜重命名的文件之所以被选中,是因为字母顺序发生了变化。我用以下方法解决了这个问题:

Get-ChildItem -Path . -OutVariable dirs
foreach ($i in $dirs) { Rename-Item $i.name ("<MY_PREFIX>"+$i.name) }
getchilditem-Path-输出变量dirs
foreach($dirs中的i){重命名项$i.name(“+$i.name)}
这将在变量$dirs中“锁定”Get ChildItem返回的结果,您可以对其进行迭代,而不用担心排序会发生变化或发生其他有趣的事情

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


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

基于@ofer.sheffer的回答,这是添加词缀的CMD变体(这不是问题,但如果搜索词缀,此页面仍然是#1谷歌结果)。由于扩展,它有点不同

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

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

细微的挑剔:不需要
@echo on
中的
@
。您刚刚关闭了
@echo
。选项2(在添加缺少的
do
后)不起作用-在重命名某些文件后,
for
会在新名称下查找它们,一次又一次地添加前缀,直到达到文件名长度限制。当使用选项2时,我得到了
ren,这在当时是出人意料的。
知道为什么吗?@billgates答案中缺少
do
这个词。对于(.)do ren“%a”前缀-%a“@SergeyVlasov,这两个选项中的%a都应该是
。避免这种情况的唯一方法是让重命名程序将其置于原始文件之上。或者在重命名后将其移动到另一个文件夹。从某个时候开始自己使用它+感谢您在帖子中添加内容。@ofer.sheffer谢谢。这个答案离题了-1@MarcoDemaio谢谢你的反馈。OP希望完成一项任务,而链接的软件使其易于完成。我相信,解决方案的复杂性并不能使它更具相关性。@GopalAggarwal:对不起,你说得对。我在他的问题中读到“我想批量重命名文件夹中的文件”,我以为他在寻找Windows批处理文件。我删除了我的-1。请考虑向您的建议添加一个不太具体的例子,其中包含$.Distury.NAME,这会导致无限循环,直到文件名达到Windows限制。改用@Dave.Gugg的回答: