1

販売システムのプログラムによって作成された、次のような形式のファイルが多数あります。

CRY_SKI_14_EDI.LIS
CRY_SUM_14_EDI.LIS
THO_SKI_14_EDI.LIS
THO_LAK_14_EDI.LIS
CRY_SKI_IE_14_EDI.LIS

これらのファイルは、当社の製品を異なるブランドに分割することによって数が異なります。次のようにすべての名前を変更することは可能ですか。

CRY_SKI_14_EDI_DEMO.LIS
CRY_SUM_14_EDI_DEMO.LIS
THO_SKI_14_EDI_DEMO.LIS
THO_LAK_14_EDI_DEMO.LIS
CRY_SKI_IE_14_EDI_DEMO.LIS

ブランドが販売されていないためにハードコードされたファイルが存在しない可能性があり、FTP を終了すると、後続の他のファイルが FTP サーバーに送信されなくなる可能性があるため、FTP の前にファイルに正しい名前を付ける必要があります。

4

1 に答える 1

4

OpenVMS rename コマンドは、完全なファイル名のチャンクを一括変更できるため、windows または unix バリアントよりも便利です (imho)。「名前」、「タイプ」、または (サブ) ディレクトリなど。

例えば:

$ rename *.dat *.old

それは素晴らしいことですが、ここで要求された名前の部分のように、チャンク (コンポーネント) 内では変更されません。そのための従来の DCL アプローチは、ディレクトリ出力を解析する (ヤッ!) か、F$SEARCH を使用するクイック ループです。例えば:

$loop:
$ file = f$search("*EDI.LIS")
$ if file .eqs. "" then exit
$ name =  f$parse(file,,,"name","syntax_only") ! grab name component from full name
$ rename/log 'file' 'name'_demo                ! rename 'fills in the blanks'
$ goto loop

個人的には、この種の作業には PERL ワンライナーを使用します。(そして、最初に「rename」の代わりに「print」を使用して -le でテストします。:-)

$ perl -e "for (<*edi.lis>) { $old = $_; s/_edi/_edi_demo/; rename $old,$_}"

楽しみ!ハイン

于 2013-10-19T14:08:03.297 に答える