powershell - 从内容中重命名多个文件
问题描述
我有一个软件每天导出多个没有扩展名的文件,但它实际上是文本文件。文件名始终如下:
RESULTS10220309014171
RESULTS10220309014231
RESULTS10220309015778
RESULTS10220309014131
所有文件(Hl7 协议行)的内容如下:
MSH|^~\&|AppName||LIS||20190501004420||ORU^R01|1905011A91C6C2450|P|2.3|||NE|SU
PID|1||602239||^^|||||||||||||
PV1|1||||||||||||||||||
....
所以前 3 行总是相同的。我想从以 PID 开头的第二行中获取数字 602239 并将其重命名为:
602239
552547
336587
696334
取决于第二行中的数字。
我已经搜索并尝试了多个代码,但没有成功,我是 PowerShell 的初学者,所以我将不胜感激。
解决方案
Get-ChildItem -Filter RESULTS* | ForEach-Object { # Loop over files of interest
$pidLine = (Get-Content $_.FullName -Head 2)[-1] # Extract 2nd line
$newName = ($pidLine -split '\|+')[2] # Get 3rd field
$_ | Rename-Item -NewName $newName -WhatIf # Rename input file
}
注意:上面命令中的-WhatIf
常用参数是预览操作。-WhatIf
一旦您确定该操作将执行您想要的操作,请删除。
推荐阅读
- php - WAMP 限制可执行文件的文件上传
- xcode - 无法获取root来构建
- python - 如何在 Azure Pipelines 中缓存 pip 包
- r - 使用 GmailR 提取所有电子邮件
- django - 如何以与供应商无关的方式从移动应用程序实现二维码交叉登录作为网站或 Web 应用程序的身份验证方法?
- javascript - 引导程序 4 更新后轮播滑块不起作用
- google-apps-script - 添加估计收入作为参数会导致禁止错误
- java - 如何将矩阵行复制到数组并修改数组?
- c# - 为什么在 Asp.net core web api 的控制器中的操作中使用 async/await
- ios - 如何在 MessageKit 中设置消息气泡的最大宽度