基于文件内容的单行PowerShell批量重命名



>我有一个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') } 

相关内容

  • 没有找到相关文章

最新更新