当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何在 PowerShell 中重命名文件?

作者:精品下载站 日期:2024-12-15 00:02:33 浏览:14 分类:玩电脑

如何在 PowerShell 中重命名文件?


要求:使用 PowerShell 重命名文件。

PowerShell 重命名文件

处理凌乱、无序的文件名是任何计算机用户常见的头痛问题。您从互联网上下载带有随机数字或重复名称的文件。您有包含名为 DSC0001、DSC0002 等图像的文件夹。或者您需要快速重命名具有公共前缀的项目的批量文件。

重命名文件是您可能需要执行的常见任务之一,以组织数据并使其更易于查找和访问。手动一一重命名文件和文件夹可能需要很长时间。这就是 PowerShell 发挥作用的地方。只需几个 PowerShell 命令,您就可以根据搜索和替换重命名多个文件、附加时间戳、添加编号序列等等。

在本初学者指南中,我们将探讨 PowerShell 中用于批量重命名文件和文件夹的不同选项。您将学习一些方便的技术,例如:

  • 如何使用 -replace 替换文件名中的文本
  • 向多个文件添加前缀/后缀
  • 删除或更改文件扩展名
  • 递归重命名子文件夹中的文件
  • 附加时间戳以进行版本控制
  • 安全处理文件名冲突

无论您是管理服务器的系统管理员还是组织文件夹的普通 PC 用户,本教程都将向您展示如何利用 PowerShell 的强大功能一劳永逸地消除文件名混乱。请继续阅读,了解 Rename-Item cmdlet 如何帮助您比手动更快地重命名文件!

使用 PowerShell 重命名单个文件

使用PowerShell,您可以轻松修改文件名、更改文件扩展名、添加前缀或后缀以及轻松执行复杂的重命名操作。 PowerShell 中的 Rename-Item cmdlet 允许您重命名文件、文件夹和注册表项等项目。要使用 PowerShell 重命名文件,可以使用 Rename-Item cmdlet。您需要指定现有文件路径以及要为其指定的指定项目的新名称。以下是 Rename-Item cmdlet 的基本语法。


Rename-Item [-Path] <String> [-NewName] <String> [-PassThru] [-Force] [-Credential <PSCredential>] [-WhatIf] [-Confirm] [<CommonParameters>]

例如,要将名为 oldname.txt 的文件重命名为 newname.txt,您可以使用以下命令:


Rename-Item -Path C:\Example\oldname.txt -NewName C:\Example\newname.txt

这会将 C:\Example 目录中的文件从 oldname.txt 重命名为 newname.txt。您可以将 -PassThru 参数添加到 cmdlet 以在 Windows Powershell 控制台中查看输出。

[玩转系统] 如何在 PowerShell 中重命名文件?

在重命名中覆盖现有文件

默认情况下,Rename-Item cmdlet 无法覆盖现有文件。您将收到一条错误消息:“Rename-Item:当文件已存在时无法创建该文件。” (不过,您可以测试目标文件是否存在,然后将其删除!)。使用 Move-Item cmdlet 来通过“Force”开关重命名文件。此 cmdlet 要求您指定文件的源路径和目标路径,其中可以包含新文件名。以下示例说明了如何使用 Move-Item cmdlet 移动和重命名文件:


Move-Item -Path C:\Temp\Oldname.txt -Destination C:\Temp\newname.txt -Force

请注意,您需要具有适当的权限才能重命名指定位置的文件。它有一个 -Force 参数,可用于覆盖移动操作期间可能发生的任何错误,例如覆盖任何现有文件并包括只读/隐藏文件。

[玩转系统] 如何在 PowerShell 中重命名文件?

PowerShell重命名多个文件

您可能遇到过需要一次重命名多个文件的情况。要在 PowerShell 中重命名多个文件,您可以使用 Get-ChildItem cmdlet 获取要重命名的文件列表,然后将该列表通过管道传输到 Rename-Item cmdlet。您可以使用通配符指定要重命名的文件,还可以使用 Rename-Item cmdlet 的 -NewName 参数指定文件的新名称。

让我们递归地将文件夹及其子文件夹中所有 txt 文件中的“空格”字符替换为“-”。


Get-ChildItem -Path "C:\Temp" -Recurse -Include "*.txt" | Rename-Item -NewName { $_.Name -replace " ","-" }

同样,您可以使用以下命令将文件名中的旧文本替换为新文本:


Get-ChildItem -Path "C:\Temp" | Rename-Item -NewName {$_.Name -replace "old", "new"}

此命令使用 Get-ChildItem cmdlet 检索给定目录中的所有文件,并将它们作为管道输入传递给 Rename-Item cmdlet。 -replace 运算符将指定的字符串替换为所需的替换内容。

重命名文件夹中数量不断增加的所有文件:

让我们为目录中的所有日志文件添加序列号:


Get-ChildItem -Path "C:\Temp\Logs" -Recurse -Include "*.txt" | ForEach-Object -Begin { $Counter = 1 } -Process { Rename-Item $_ -NewName "Log_$Counter.log" ; $Counter++ }

您可以将结果沿管道发送并将其通过管道传送到Where-object cmdlet,而不是使用-include 和-exclude 参数。

[玩转系统] 如何在 PowerShell 中重命名文件?

通过在文件名中添加时间戳来重命名所有文件

要将时间戳后缀添加到文件夹中的所有文件,请使用:


#Get the Timestamp
$TimeStamp = Get-Date -F yyyy-MM-dd_HH-mm

#Get all text files from a Folder and rename them by appending Timestamp
Get-ChildItem -Path "C:\Temp" -Recurse -Include "*.txt" | ForEach-Object { 
    Rename-Item -Path $_.FullName -NewName "$($_.DirectoryName)$($_.BaseName)_$TimeStamp$($_.Extension)"
}

这首先获取当前日期,然后将其附加到选择的文件名中。

重命名当前目录中的所有文件,并在每个文件前面加上“AppLog - ”前缀:


#Get all text files from a Folder and rename them by appending Timestamp
Get-ChildItem -Path "C:\Temp" -Recurse -Include "*.txt" | ForEach-Object {
    Rename-Item $_.FullName -NewName "$($_.DirectoryName)\AppLog - $($_.BaseName)$($_.Extension)"
}

这里,$_ 自动变量代表通过 Get-ChildItem 管道传输的每个文件对象。

批量重命名目录中的所有文件

在 Windows 文件资源管理器中批量重命名文件可能是一项耗时的任务,尤其是在处理大量文件时。值得庆幸的是,有一些有效的方法可以使用 PowerShell 自动化此过程。

我们需要使用循环来遍历文件夹中的文件,并在脚本块中一一更改文件的名称。下面是如何过滤和重命名一系列名为“abc.txt”、“def.txt”、“xyz.txt”等的文件为“file1.csv”、“file2.csv”、“file3”的示例.csv”等。您可以使用以下脚本。这将以顺序方式重命名文件,并增加每个文件的文件名末尾的数字。


$i = 1
Get-ChildItem -Path C:\Temp\*.txt | ForEach-Object {
   Rename-Item $_ -NewName "File$i.csv"
   $i++
}

此命令使用 Get-ChildItem cmdlet 获取 Temp 文件夹中扩展名为 .txt 的所有文件。然后,它使用 ForEach-Object cmdlet 迭代每个文件,并将所选文件的 .txt 扩展名替换为 .csv 扩展名。

使用序列号重命名文件

如果要向文件名添加序号,可以使用循环和 -f 格式运算符。这允许您在每个文件名的末尾添加一个数字。这是一个例子:


$i = 1
Get-ChildItem -Path "C:\Docs" -File -Filter "*.zip" | ForEach-Object {
    $NewName = "File-{0:D3}{1}" -f $i, $_.Extension
    Rename-Item $_.FullName -NewName $NewName
    $i++
}

在此示例中,循环遍历每个 zip 文件,并且 $i 变量递增 1。这里,$_ 表示文件对象。 -f 运算符用于格式化新文件名,其中 {0:D3} 表示带前导零的序列号,{1} > 代表文件扩展名。

通过使用PowerShell脚本添加前缀或后缀来批量重命名文件

重命名文件夹中的多个文件可能是一项乏味且容易出错的任务,尤其是当您有大量文件需要重命名时。 PowerShell 脚本可以帮助自动执行此任务并节省您的时间和精力。下面是一个 PowerShell 脚本示例,该脚本将文件夹中的所有文件重命名为具有前缀和后缀:


#Parameters
$Folder = "C:\Reports"
$Prefix = "MyPrefix_"
$Suffix = "_MySuffix"

#Add Prefix and Suffix to All Files in the Folder
Get-ChildItem -Path $Folder | ForEach-Object {
    $NewName = '{0}{1}{2}{3}' -f $Prefix,$_.BaseName,$Suffix,$_.Extension
    Rename-Item -Path $_.FullName -NewName $NewName
}

此脚本使用 Get-ChildItem cmdlet 获取指定文件夹中的所有文件。然后,它使用 ForEach-Object cmdlet 迭代每个文件并使用变量中指定的前缀和后缀对其进行重命名。

使用 PowerShell 重命名文件扩展名

PowerShell 提供了一种使用 -replace 运算符重命名文件扩展名的简单方法。以下是将所有具有 .txt 扩展名的文件重命名为具有 .log 扩展名的方法:


#Get All Txt Files from C:\Logs Folder
$Files = Get-ChildItem C:\Logs\*.txt

#Change File extention from .txt to .log
ForEach ($File in $Files) {
    Rename-Item -Path $File.FullName -NewName ($File.Name -replace ".txt", ".log")
    Write-host "Renamed File:"$File.FullName
}

这将重命名 C:\Logs 目录中的所有 .txt 文件,使其具有 .txt 扩展名。它使用 -replace 运算符将 .txt 扩展名替换为 .log,同时保持其余文件名相同。

使用正则表达式 (RegEx) 重命名文件

如果需要使用更复杂的模式重命名文件,可以在 PowerShell 中使用正则表达式。正则表达式允许您匹配和替换文件名中的特定模式。这是一个例子:


Get-ChildItem -Path "C:\Docs" -File | Rename-Item -NewName {$_.Name -replace '(\d{4})-(\d{2})-(\d{2})', '$2-$3-$1'}

在此示例中,正则表达式模式 (\d{4})-(\d{2})-(\d{2}) 匹配格式为“YYYY-MM-DD”的日期并交换年和日的位置,形成“MM-DD-YYYY”格式。这是从文件名中删除特殊字符的另一个示例:


Get-ChildItem -Path "C:\Documents" -Filter "*.txt" | Rename-Item -NewName { $_.Name -replace "[^\w\s\.-]", "" }

在上面的示例中,我们从 C:\Documents 中所有扩展名为 .txt 的文件的文件名中删除所有特殊字符(不包括空格和破折号)目录。正则表达式模式 [^\w\s\.-] 匹配除单词字符、空白字符、点或连字符之外的任何字符。

如果文件存在于 PowerShell 中,则重命名

在 PowerShell 中重命名文件时,您可能会遇到要使用的新文件名已存在的情况。为了避免覆盖现有文件,您可以在重命名之前检查文件是否存在。要在 PowerShell 中重命名文件(如果存在),您可以使用 Test-Path cmdlet 检查该文件是否存在,然后使用 Rename-Item cmdlet 重命名该文件文件。以下是如何执行此操作的示例:


#Parameter
$OldFile = "C:\Logs\OldFile.txt"
$NewFile = "C:\Logs\NewFile.log"

#PowerShell to rename file if exists
If (Test-Path $OldFile) {
    Rename-Item -Path $OldFile -NewName $NewFile
    Write-host "'$OldFile' has been renamed to '$NewFile'" -f Green
}
Else{
    Write-host "'$OldFile' does not exists!" -f Yellow
}

这将检查指定路径中是否存在 oldFile.txt。如果是,它将被重命名为 newFile.log。如果该文件不存在,则不会执行 Rename-Item cmdlet,并且脚本将继续运行。在重命名旧文件之前检查目标文件是否存在并删除它怎么样?


#Parameter
$OldFile = "C:\Logs\OldFile.txt"
$NewFile = "C:\Logs\NewFile.log"

#PowerShell to rename file if exists
If (Test-Path $OldFile) {
    #Check if the Target File Exists
    If (Test-Path $NewFile) {
        #Delete the target file
        Remove-Item $NewFile
    }
    Rename-Item -Path $OldFile -NewName $NewFile
    Write-host "'$OldFile' has been renamed to '$NewFile'" -f Green
}
Else{
    Write-host "'$OldFile' does not exists!" -f Yellow
}

为了避免冲突,您还可以在批量重命名操作中生成新名称时使用唯一的前缀/后缀或时间戳。

PowerShell 移动和重命名

我们还可以结合 Move-ItemRename-Item cmdlet 一步移动和重命名文件。例如,要将文件 newreport.docx 移动到 Archive 文件夹并重命名:


# Rename and move an item
Move-Item -Path .\ApplicationLog.txt -Destination .\Archive\AppLog.txt

这将通过一个命令移动并重命名该文件。确保目标文件夹已就位。否则,您将面临“移动项目:找不到路径的一部分”。错误。有关移动文件的更多信息请参见:如何在 PowerShell 中移动文件?

PowerShell 重命名文件 - 使用案例:

以下是您可能希望使用 PowerShell 重命名文件的一些常见场景:

  • 清理混乱的文件名或命名约定不一致的文件夹名称
  • 通过删除附加到文件名的随机数字来重命名下载的文件 - 批量重命名文件
  • 一次添加或删除多个文件的文件扩展名
  • 将时间戳或顺序编号附加到文件名
  • 将客户名称或项目名称添加到批量文件中
  • 当从另一个系统迁移文件并且需要修改文件名时
  • 用于图像、视频或音频文件的批量后处理

手动重命名一两个文件很容易。但对于批量重命名任务,使用 PowerShell 可以节省大量时间和精力。

结论

总之,PowerShell 可以使重命名大量文件等耗时的任务变得更加简单和快捷。它允许您使用通配符和其他高级功能一次重命名多个文件。它还允许您在使用“-WhatIf”开关提交更改之前预览更改,这有助于避免错误。同样,-confirm 在执行命令之前提示确认。在本指南中,我们探索了使用 PowerShell 重命名文件的不同方法,包括重命名单个文件、重命名文件夹中的多个文件、使用 PowerShell 脚本批量重命名文件以及重命名文件扩展名。总体而言,PowerShell 可以轻松、快速、高效地重命名文件,使其成为处理大量文件的任何人的宝贵工具。

因此,下次您需要处理充满杂乱文件的文件夹时,不要浪费时间手动重命名它们。使用 PowerShell 以闪电般的速度批量重命名文件。 Rename-Item cmdlet 以及一些 PowerShell 技巧可以节省您数小时的精力。

经常问的问题:

在 PowerShell 中重命名文件夹的命令是什么?

在 PowerShell 中重命名文件夹的命令行工具是“Rename-Item”。例如,Rename-Item -Path 'C:\old_folder' -NewName 'new_folder'
这里是有关如何使用 PowerShell 重命名文件夹?

如何在 PowerShell 中重命名文件夹和子文件夹中的所有文件?

要使用 PowerShell 重命名文件夹及其子文件夹中的所有文件,可以使用“Get-ChildItem”cmdlet 获取所有文件,然后使用“Rename-Item”cmdlet 重命名它们。以下是可用于向所有文件添加前缀的 PowerShell 脚本示例:

Get-ChildItem -Path "C:\Docs" -File -Recurse | ForEach-Object {
Rename-Item -Path $_.FullName -NewName ("new_" + $_.Name)
}

如何在命令行中更改文件夹名称?

要使用命令行更改文件夹名称,您可以使用“ren”命令,后跟当前文件夹名称和新文件夹名称。例如,如果要将文件夹名称从“old_folder”更改为“new_folder”,则可以键入“ren old_folder new_folder”并按 Enter 键。

如何在 PowerShell 中移动和重命名文件?

要在 PowerShell 中移动和重命名文件,您可以使用 Move-Item cmdlet。以下是如何执行此操作的示例:

Move-Item -Path "C:\Docs\Logs.zip" -Destination "C:\Docs\New-Logs.zip"

如何使用 PowerShell 重命名注册表中的项?

除了重命名文件和文件夹之外,Rename-Item cmdlet 还可以用于重命名注册表项和值。这是一个例子:

Rename-Item -Path "HKCU:\Software\MyKey" -NewName "NewKey"
Set-ItemProperty -Path "HKLM:\Software\MyKey" -Name "OldValue" -Value "NewValue"

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯