我构建了一个简单的程序,尝试打印命令行参数。
代码如下,我构建了一个可执行文件(TEST.EXE)。
int main(int argc, char *argv[])
{
int i;
printf("%s\n",argv[0]);
for (i = 1; i < argc; i++)
printf("argument %d: %s\n", i, argv[i]);
exit (EXIT_SUCCESS);
}
我尝试运行TEST.EXE并打印参数但失败。
命令RUN TEST.EXE test1 test2
的结果:
%DCL-W-MAXPARM, too many parameters - reenter command with fewer parameters
我该怎么做才能打印“test1”和“test2”?
答案 0 :(得分:7)
RUN
命令不支持任何命令行参数。定义外部命令并使用它。来自David Mathog的beginner FAQ:
如何启动程序?
方法2:使用
RUN
命令:
$ run program_name
的No command line arguments allowed
的方法3:为其定义外来命令,然后运行它。在里面 以下 示例其中是一个等同于的逻辑名称 该计划的位置。
$ new_command :== $where:program_name
$ new_command [command line arguments]
答案 1 :(得分:3)
根据&#39; a3f&#39;定义外国命令。是正确的&#39;这样做的方式虽然有点乏味和两步。
您可能还想尝试MCR&#39;技巧&#39;。 MCR是40多年历史的PDPD-11操作系统RSX中Monitor Command Routine的缩写。
现在MCR默认在SYS $ SYSTEM中查找程序,因此您必须指定当前位置:
$ MCR dev:[dir]TEST this is a test.
还有使用DCL $ PATH的1-1 / 2步骤方法。 这主要类似于Unix和Windows路径,如果输入了未知命令,则提供查找DCL脚本或程序的位置。
例如
$ DEFINE DCL$PATH SYS$DISK:[],SYS$LOGIN:,SYS$SYSTEM:
现在只需输入:TEST this.
海恩
答案 2 :(得分:2)
此外,如果您需要保留参数的大小写,则必须引用这些参数或输入
$ SET PROCESS/PARSE_STYLE=EXTENDED
在您的流程生命周期中
$ DEFINE/USER DECC$ARGV_PARSE_STYLE TRUE
在使用特定外部命令或使用自动外部命令(DCL $ PATH)运行程序之前。否则,所有未加引号的参数都将转换为小写字符。
PS:VMS有一种命令语言,也就是说,你必须输入命令来运行程序。默认情况下,文件名不是命令。通过定义DCL $ PATH,您可以更改此默认行为。