OpenVMS - 通过DCL将STRING添加到文件名

时间:2013-10-19 13:27:14

标签: openvms

我的销售系统上的程序创建了许多文件,这些文件的格式如下:

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服务器

1 个答案:

答案 0 :(得分:4)

OpenVMS重命名命令比windows或unix变体更方便(imho),因为它可以批量更改完整文件名的块。例如'name','type'或(sub)目录。

例如:

$ rename *.dat *.old

这很好但是它不会在像这里要求的名称部分那样的块(组件)内发生变化。 为此,经典的DCL方法是一个快速循环,要么解析目录输出(Yuck!),要么使用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'而不是'重命名'来测试-le。: - )

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

享受! 海因