当前位置: 首页 > news >正文

PowerShell批量处理文件名称/内容的修改

在日常的文件管理与处理中,常常需要对大量文件名或文件内容进行修改,而手动逐个操作既繁琐又容易出错。PowerShell作为一种强大的脚本语言,为我们提供了高效批量处理文件名及内容修改的解决方案。通过编写简单的PowerShell脚本,可以轻松实现对文件的批量重命名、替换文件中的特定字符串等操作,极大地提高工作效率,减少人工操作的失误,让文件管理变得更加便捷与高效。

PowerShell使用方法

一、以管理员身份打开 PowerShell

按 Win 键打开开始菜单

输入 PowerShell

在搜索结果中 右键单击 Windows PowerShell

选择 "以管理员身份运行"

若弹出 UAC 提示,点击 "是" 确认

二、写好脚本文件

三、运行脚本文件

.\demo.ps1 # 执行当前目录下的脚本

当用该方法运行脚本时经常会出现如下报错:.\rename_files.ps1 : 无法加载文件 D:\all_project\rename_files.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。所在位置 行:1 字符: 1

这个错误是由于 PowerShell 的安全策略禁止运行脚本文件造成的。

📌 错误原因分析

PowerShell 执行策略限制

  • PowerShell 默认设置为 Restricted(限制模式)
  • 此策略会阻止任何脚本文件(.ps1)执行
  • 系统保护机制防止潜在恶意脚本运行

检查当前执行策略,在 PowerShell 中输入:

Get-ExecutionPolicy
  • 若返回 Restricted(默认状态),则需修改策略才能运行脚本

针对该问题,通常可以选择临时绕过策略

PowerShell.exe -ExecutionPolicy Bypass -File "D:\路径\脚本名.ps1"

👉 特点:仅本次生效,不影响系统安全设置,执行命令如下所示:

PowerShell批量处理文件名称替换的脚本

# 定义根目录路径(所有文件操作的基础路径)
$rootPath = "D:\all_project\STM32F10x_StdPeriph_Driver\src"# 显示脚本启动信息
Write-Host "Started file renaming..."# 递归获取根目录下所有文件,仅筛选名称包含'f10x'的文件
$files = Get-ChildItem -Path $rootPath -Recurse -File | Where-Object { $_.Name -match 'f10x' 
}# 遍历筛选后的文件集合
foreach ($file in $files) {# 替换文件名$newName = $file.Name -replace 'f10x', 'F103'# 异常处理块try {# 显示重命名操作详情Write-Host "Renaming: $($file.Name) -> $newName"# 执行实际重命名操作(-Force覆盖同名文件)Rename-Item -Path $file.FullName -NewName $newName -Force# 成功提示(绿色文字)Write-Host "Renamed successfully." -ForegroundColor Green}catch {# 错误处理:显示失败原因(红色文字)Write-Host "Error renaming $($file.FullName): $_" -ForegroundColor Red}
}# 显示脚本完成信息(青色文字)

处理结果:

PowerShell批量处理文件内容字符替换的脚本

# 设置根目录路径(STM32标准外设驱动源码位置)
$rootPath = "D:\all_project\STM32F10x_StdPeriph_Driver\src"# 定义需要处理的目标文件扩展名列表(覆盖常见代码/配置文件类型)
$fileExtensions = @("*.c", "*.h", "*.txt", "*.htm", "*.uvprojx", "*.uvoptx", "*.bat", "*.xlsx", "*.*")# 显示脚本开始执行的提示信息
Write-Host "Starting to replace 'f10x' with 'F103' in file contents..."# 遍历每种文件扩展名类型
foreach ($extension in $fileExtensions) {# 递归获取当前扩展名的所有文件$files = Get-ChildItem -Path $rootPath -Filter $extension -Recurse -File# 记录文件总数用于进度显示$fileCount = $files.Count$processedCount = 0  # 已处理计数器# 遍历当前扩展名的所有文件foreach ($file in $files) {# 读取文件全部内容(-Raw保留换行符格式)$content = Get-Content -Path $file.FullName -Raw -ErrorAction SilentlyContinue# 当文件内容存在且非空时执行替换if ($content) {# 进行字符串替换(大小写敏感)$newContent = $content -replace "f10x", "F103"# 比较内容是否发生变化(避免不必要的写入)if ($newContent -ne $content) {try {# 写入修改后的内容(-Force覆盖只读文件)$newContent | Set-Content -Path $file.FullName -ForceWrite-Host "Updated content in: $($file.FullName)"}catch {# 文件写入失败时的错误处理Write-Host "Error updating $($file.FullName): $_" -ForegroundColor Red}}}# 更新进度计数器$processedCount++# 每处理100个文件显示一次进度if ($processedCount % 100 -eq 0) {Write-Host "Processed $processedCount of $fileCount files..."}}
}

处理结果:

http://www.lqws.cn/news/456013.html

相关文章:

  • 局域网文件共享及检索系统
  • 云祺容灾备份系统公有云备份与恢复实操-AWS
  • Rust使用tokio(二)HTTPS相关
  • day03-微服务01
  • 商业秘密被公开后的损失计算:从法律规定到司法实践的深度解析
  • 举办骑行展览的城市需要具备哪些关键条件
  • 【vdbench】vdbench配置文件参数含义
  • 【工具使用-VScode】VScode如何设置空格和tab键显示
  • .Net Framework 4/C# 数据访问技术(ADO.NET)
  • 一些实用的chrome扩展0x02
  • C#上位机实现报警语音播报
  • VS Code快捷键大全
  • Python OpenCV 模板匹配的一些应用场景和方法思考,浅析KAZE特征匹配对比
  • Windows 10 防火墙 0x8007045b 打不开
  • 数据库 ACID 特性之 -- 原子性 Atomicity
  • 软件架构的发展历程——从早期的单体架构到如今的云原生与智能架构
  • shell学习笔记
  • 领码 SPARK 融合平台赋能工程建设行业物资管理革新——数智赋能,重塑中国模式新范式
  • LeetCode 275.H指数 II
  • RPC - 服务注册与发现模块
  • 【C++】哈希表的实现(开放定址法)
  • 电磁场数值仿真技术及天线设计与应用
  • 协程(C++)
  • 设计模式精讲 Day 9:装饰器模式(Decorator Pattern)
  • HTTP与HTTPS深度解析:从明文传输到安全通信的演进之路
  • flask通过表单自动产生get请求的参数、form表单实现POST请求的自动提交
  • 轻量级web开发框架之Flask web开发框架学习:get请求数据的发送
  • HCIP-数据通信基础
  • FFmpeg 超级详细安装与配置教程(Windows 系统)
  • Java八股文——消息队列「场景篇」