我有一个包含特定文本的 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
只需获取我们需要输入以重命名的路径列表
之后的第二部分| 管道:
Foreach -Begin {$i=1} -Process {Rename-Item -LiteralPath $_ -NewName ($_ -replace '\.out','.867.out' -f $i++) -whatif}
应该会循环遍历该列表并重命名文件,将 EDI 类型添加到文件末尾。我试过'out$','867.out'
没有改变。
当前错误:
- 第一部分显示重复的路径元素可能是因为文件中有多个事务集标头,有没有办法强制它是唯一的?
- 该命令没有显示任何错误(红色文本),但使用 whatif 参数显示它没有重命名任何文件(也尝试在没有的情况下运行它)。