首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenVMS -通过DCL向文件名添加字符串

OpenVMS -通过DCL向文件名添加字符串
EN

Stack Overflow用户
提问于 2013-10-19 13:27:13
回答 1查看 723关注 0票数 1

我有一些文件是由我们的销售系统上的一个程序创建的,这些文件的格式如下:

代码语言:javascript
复制
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

这些文件的数量不同,取决于我们的产品被分割成不同的品牌。是否可以将它们全部重命名,使它们读起来如下:

代码语言:javascript
复制
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服务器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-19 14:08:03

OpenVMS重命名命令比windows或unix变体更方便(imho),因为它可以大容量地更改完整文件名的块。例如“名称”、“类型”或(子)目录。

例如:

代码语言:javascript
复制
$ rename *.dat *.old

这很好,但是它不会在块(组件)中改变,比如这里所要求的名称部分。为此,典型的DCL方法是一个快速循环,要么解析目录输出(Yuck!)或者用F$SEARCH。例如:

代码语言:javascript
复制
$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一行程序。(我使用-le进行测试,首先使用的是“print”而不是“rename”。:-)

代码语言:javascript
复制
$ perl -e "for (<*edi.lis>) { $old = $_; s/_edi/_edi_demo/; rename $old,$_}"

享受吧!海因

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19466521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档