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 重命名命令比 windows 或 unix 变体更方便(恕我直言),因为它可以批量更改完整文件名的块。例如“名称”、“类型”或(子)目录。

例如:

$ 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 单线来完成这种工作。(我首先使用'print'而不是'rename'来测试-le。:-)

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

享受!海因

于 2013-10-19T14:08:03.297 回答