2

特定のテキストを含む EDI テキスト ファイルのリストがあります。現在、カスタム スクリプトでそれらを SQL テーブルに変換するには、ファイル名で X12 ファイル タイプを確認できる必要があります。ファイルをテーブルに入れるために SQL スクリプトを使用しているため、このソリューションは 1 行のソリューションである必要があります。検索するフィールド ターミネータとファイル タイプを指定するクライアント ファイルの定義テーブルがあるので、後でこれらの値を 1 行のソリューションに置き換えて、個別に実行します。私は現在、現在および将来の互換性を最大限に高めるために、Powershell (v.3) を検討しています。また、私は Powershell をまったく初めて使用し、このフォーラムの投稿に基づいてスクリプトを生成しました。

ファイルの例

  • t.text.oxf.20170815123456.out
  • t.text.oxf.20170815234567.out
  • t.text.oxf.20170815345678.out
  • t.text.oxf.20170815456789.out

ファイル内で検索する検索文字列: (同じファイル内で n 回重複する可能性のある EDI X12 ファイル タイプを一意に検索するため)

  • 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

名前を変更するために入力する必要があるパスのリストを取得するだけです

| の後の 2 番目の部分 パイプ:

Foreach -Begin {$i=1} -Process {Rename-Item -LiteralPath $_ -NewName ($_ -replace '\.out','.867.out' -f $i++) -whatif}

おそらくそのリストをループし、EDIタイプをファイルの最後に追加してファイルの名前を変更します。私は変更なしで試し'out$','867.out'ました。

現在のエラー:

  • 最初の部分は、おそらくファイルに複数のトランザクション セット ヘッダーがあるため、重複したパス要素を示しています。強制的に一意にする方法はありますか?
  • このコマンドはエラー (赤いテキスト) を表示しませんが、whatif パラメーターを使用すると、ファイルの名前が変更されないことが示されます (エラーなしで実行してみました)。
4

1 に答える 1