>我有一个EDI文本文件的列表,其中包含特定的文本。目前,为了使我们的自定义脚本将它们转换为SQL表,我们需要能够在文件名中看到X12文件类型。因为我们使用 SQL 脚本将文件放入表中,所以此解决方案需要是单行解决方案。我们有一个客户端文件的定义表,它指定要查找的字段终止符和文件类型,因此我们稍后将这些值替换为要单独执行的单行解决方案。我目前正在考虑Powershell(v.3(来执行此操作,以实现最大的当前和未来兼容性。另外,我是Powershell的新手,并且我的脚本生成基于此论坛中的帖子。
文件示例
- t.text.oxf.20170815123456.out
- t.text.oxf.20170815234567.out
- t.text.oxf.20170815345678.out
- t.text.oxf.20170815456789.out
搜索要在文件中查找的字符串:(要唯一地查找 EDI X12 文件类型,该文件类型可能在同一文件中重复 n 次(
- ST*867
- ST*846
- ST~867
- ST~846
- ST|867
- ST|846
这是我到目前为止所拥有的,它没有显示自己对 whatif 参数做任何事情:
(Get-ChildItem . -recurse | Select-String -pattern 'ST~867' -SimpleMatch).Path | Foreach -Begin {$i=1} -Process {Rename-Item -LiteralPath $_ -NewName ($_ -replace 'out$','867.out' -f $i++) -whatif}
拳头部分:
(Get-ChildItem . -recurse | Select-String -pattern 'ST~867' -SimpleMatch).Path
只需获取我们需要输入以重命名的路径列表
| pipe之后的第二部分:
Foreach -Begin {$i=1} -Process {Rename-Item -LiteralPath $_ -NewName ($_ -replace '.out','.867.out' -f $i++) -whatif}
应该会遍历该列表并重命名将 EDI 类型添加到文件末尾的文件。我已经尝试了'out$','867.out'
没有变化。
当前错误:
- 第一部分显示重复的路径元素可能是因为文件中有多个事务集标头,有没有办法强制它是唯一的?
- 该命令不显示任何错误(红色文本(,但使用 whatif 参数显示它不会重命名任何文件(尝试在没有的情况下运行它(。
1( 使用选择字符串中的 -List 开关删除重复项 2(你需要真正将对象管道到for循环中
试试这个?
Select-String -Path .*.out -pattern 'ST~867' -SimpleMatch -List | Select-Object Path | ForEach-Object { Rename-Item $_.path ($_.path -replace 'out$','867.out') }