我有一个EDI文本文件列表,其中包含特定文本。目前,为了让我们的自定义脚本将它们转换为SQL表,我们需要能够在文件名中看到X12文件类型。因为我们使用SQL脚本将文件放入表中,所以此解决方案需要是一个单行解决方案。我们有一个客户端文件的定义表,它指定要查找的字段终结符和文件类型,以便稍后将这些值替换为单行执行的单行解决方案。我目前正在研究Powershell(第3版),以实现最大限度的当前和未来兼容性。另外,我对Powershell完全不熟悉,并且已将我的脚本生成基于此论坛的帖子。
这是我到目前为止没有用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'
但没有改变。
答案 0 :(得分:1)
1)使用Select-String中的-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') }