当前位置: 首页 > 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..."}}
}

处理结果:

相关文章:

  • 【二进制安全作业】250617课上作业4 - start
  • Ntfs!LfsGetLbcb函数分析之Ntfs!LfsPrepareLfcbForLogRecord
  • Sentinel 服务限流机制
  • opencv依据图像类型读取图像像素点
  • 软件公司进军无人机领域的战略指南与生态合作全景-优雅草卓伊凡
  • Tomcat项目本地部署(Servlet为例)
  • 性能测试-jmeter实战3
  • jmeter工具简单认识
  • Vue + AbortController 请求取消弹窗 hook 封装
  • 【Qt】QTableWidget表格右键菜单
  • 键盘觉醒:Raycast 把 Mac 变成「AI 指令战舰」
  • joomla 使用nginx服务器只能打开首页,其他页面404的解决方案
  • 16、Redis底层数据结构
  • 样式失控:Word文档格式混乱的根源与对策
  • 【Flink实战】 Flink SQL 中处理字符串 `‘NULL‘` 并转换为 `BIGINT`
  • 【Ambari3.0.0 部署】Step4—时间同步(Chrony)-适用于el8
  • Xilinx XC7A12T‑1CPG238I Artix‑7 FPGA
  • Java 编程之代理模式
  • Matter协议开发者指南:使用Matter SDK构建智能家居应用
  • 数学公式排版简史
  • web程序设计asp.net网站开发课后答案/市场调研报告范文模板word
  • 毕业设计做网站有哪些方面/微友圈推广平台怎么加入
  • 好网站建设公司选择哪家好/seo百度网站排名研究中心关键词首页优化
  • 建站网址打不开/游戏优化软件
  • 高校网站建设研究意义/湖南企业竞价优化服务
  • 网站制作及排名优化/手机网站