PowerShell脚本实现批量修改文件名 带撤销功能 一键重命名

PowerShell脚本实现批量修改文件名 带撤销功能 一键重命名

Feature

  1. 批量重命名功能;
  2. 可新增前缀或后缀;
  3. 可选择是否保留原文件名;
  4. 可选择是否修改文件扩展名;
  5. 可实现自动递增数字拼接文件名;
  6. 可完美实现回退功能,当你对效果不满意时,可以撤销重命名;
  7. 该脚本由cmd脚本升级而来,可实现更多功能;
  8. 可一键运行的PowerShell脚本,无需安装任何环境,具有自带PowerShell的Windows即可,非常方便;
  9. 方便快捷,与其它批量重命名方式相比,不用你先专门处理一下原文件名,也不用你写cmd代码,也不用你打开Excel一通操作;
  10. 能看懂代码的小伙伴还能在原功能基础上自行定义自己喜欢的功能;

源代码

# 使用 PowerShell 实现的脚本
$dirPath = Read-Host "请输入要批量修改文件名的路径(直接回车使用当前目录)"
if ([string]::IsNullOrEmpty($dirPath)) { $dirPath = Get-Location.Path }

$prefix = Read-Host "请输入文件名前缀(直接回车不添加前缀)"
$suffix = Read-Host "请输入文件名后缀(直接回车不添加后缀)"

$retainBaseName = Read-Host "是否保留原文件名BaseName? y/n "
if ($retainBaseName -eq 'n') { 
    $retainBaseName = $false
    $counter = [int](Read-Host "请输入起始计数器值")
} else { 
    $retainBaseName = $true 
    $counter = 0 
}

$modifyExtension = Read-Host "是否修改文件扩展名? y/n "
if ($modifyExtension -eq 'y') {
    $newExtension = Read-Host "请输入新的扩展名(直接回车以删除扩展名)"
    if ([string]::IsNullOrEmpty($newExtension)) { $newExtension = '' }
} else {
    $newExtension = $null
}

if (-not $prefix -and -not $suffix -and $retainBaseName -and -not $modifyExtension) {
    Write-Host "没有输入前缀、后缀,保留原文件名BaseName,且不修改扩展名,操作已取消。"
    return
}

Write-Host "您输入的路径是: $dirPath"
Write-Host "文件名前缀是: $prefix"
Write-Host "文件名后缀是: $suffix"

Write-Host "是否保留原文件名BaseName: $retainBaseName"
Write-Host "起始计数器值: $counter"

Write-Host "是否修改文件扩展名: $modifyExtension"
if ($modifyExtension) { Write-Host "新的扩展名是: $newExtension" }

$confirm = Read-Host "确定重命名该路径下的所有文件吗?y/n "
if ($confirm -ne 'y') {
    Write-Host "操作已取消。"
    return
}

$backupList = @{}
Get-ChildItem -Path $dirPath | Where-Object { $_.PSIsContainer -eq $false } | ForEach-Object {
    $oldName = $_.FullName
    $baseName = $_.BaseName
    $extension = $_.Extension
    
    # 构建新文件名
    $newName = ""
    if ($prefix) { $newName = "$prefix-" }
    if ($retainBaseName) { $newName += $baseName }
    if (-not $retainBaseName) { $newName += "{0:D6}" -f $counter }
    if ($suffix) { $newName += "-$suffix" }
    if ($modifyExtension) { $extension = $newExtension }
    $newName = Join-Path $dirPath "$newName$extension"
    
    Rename-Item -Path $oldName -NewName $newName
    $backupList["$newName"] = $oldName
    $counter++
}

Write-Host "文件重命名完成!"

$undo = Read-Host "输入'n'撤销本次重命名,其他键结束"
if ($undo -eq 'n') {
    foreach ($item in $backupList.GetEnumerator()) {
        if (Test-Path $item.Key) {
            Rename-Item -Path $item.Key -NewName $item.Value
        } else {
            Write-Warning "文件 '$($item.Key)' 不存在,无法撤销重命名。"
        }
    }
    Write-Host "已撤销重命名。"
} else {
    Write-Host "结束。"
}

# 保持窗口打开
Read-Host "按任意键退出..."

使用方法

  1. 脚本代码保存为.ps1格式
    脚本格式
  2. 右键使用PowerShell运行
    使用PowerShell运行
    打开脚本

原文件名

原文件名

进行文件名批量修改

进行文件名批量修改

效果

效果

撤销功能

撤销功能


在这里插入图片描述
在这里插入图片描述


----------- 2024年9月1日 更新--------------

PowerShell 权限策略修改

可能报错:无法加载文件 xxx.ps1,因为在此系统上禁止运行脚本 。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
在这里插入图片描述

解决办法
# 查看当前安全策略:
PS C:\Windows\system32> get-executionpolicy
Restricted

PS C:\Windows\system32> get-executionpolicy -list

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined

# 修改安全策略,以执行我们的脚本:
PS C:\Windows\system32> set-executionpolicy RemoteSigned

执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y](Y)  [A] 全是(A)  [N](N)  [L] 全否(L)  [S] 暂停(S)  [?] 帮助 (默认值为“N”): y
PS C:\Windows\system32>



# 等下执行完我们的脚本,可以修改回默认值
PS C:\Users\Will\Desktop> get-executionpolicy -list

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned


PS C:\Users\Will\Desktop> set-executionpolicy Undefined

执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y](Y)  [A] 全是(A)  [N](N)  [L] 全否(L)  [S] 暂停(S)  [?] 帮助 (默认值为“N”): Y
PS C:\Users\Will\Desktop>
PS C:\Users\Will\Desktop> get-executionpolicy -list

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined

PS C:\Users\Will\Desktop>

脚本就可以执行了!!

脚本编码问题

在这里插入图片描述
请使用你的文本编辑器将脚本转为 ANSI 编码格式!

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值