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

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.xdnf.cn/news/14653.html

相关文章:

  • 大模型在肺癌预测及个性化诊疗方案中的应用研究
  • Git——分布式版本控制工具
  • NVIDIA开源Fast-dLLM!解析分块KV缓存与置信度感知并行解码技术
  • android gradle的优化
  • uni-app-配合iOS App项目开发apple watch app
  • 【大模型学习】项目练习:知乎文本生成器
  • RIP路由协议实验任务八:RIPv1配置与分析
  • Seata的总结
  • Kafka协议开发总踩坑?3步拆解二进制协议核心
  • 领码 SPARK 融合平台赋能工程建设行业物资管理革新——数智赋能,重塑中国模式新范式
  • NestJS中实现动态Cron任务管理
  • 【 感知集群】大规模分布式基础设施的AI赋能蓝图
  • JS红宝书笔记 8.2 创建对象
  • IPv4编址及IPv4路由基础
  • 73、MYSQL ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin含义
  • Transformer结构介绍
  • 记录存储的使用
  • uni-app项目实战笔记16--实现头部导航栏效果
  • 优化TCP/IP协议栈与网络层
  • 工程师生活:清除电热水壶(锅)水垢方法
  • Apache Hive技术详解
  • NetworkManager介绍与用法
  • Singularity 安装
  • [接口-ihrm]
  • Git版本控制详细资料
  • 计算机网络:(五)信道复用技术,数字传输系统,宽带接入技术
  • [Data Pipeline] Kafka消息 | Redis缓存 | Docker部署(Lambda架构)
  • 69、数据访问-准备阿里云redis环境
  • 面试题:设计一个分布式“附近的人”功能(如微信附近的人、交友应用位置匹配)
  • WSL 安装使用和常用命令