带有空格的变量如何在Doskey宏中传递?

7
我正在创建一些我经常使用的通用doskey命令。我试图在doskey宏中使用多个变量,有时一个变量会有空格。我尝试引用变量值,但它不起作用。唯一起作用的是在宏字符串的末尾添加更多的变量。
我想使用以下方式: doskey keycmd=plink -l user -pw password $1 -batch $2 然后执行如下:c:> keycmd hostname "dir /p /users"
但是当执行时,doskey看到的是:$1=hostname,$2="dir",而"dir"不是命令,/p和/users完全被忽略。
为了使其工作,我必须这样定义它: doskey keycmd=plink -l user -pw password $1 -batch $2 $3 $4 并按以下方式执行:c:> keycmd hostname dir /p /users
是否有办法将"dir /p /users"分组为单个$2变量?对于doskey变量参数,您只能获得9个,$1..$9。最终,我可能会在复杂的命令上耗尽。我尝试过使用单引号和双引号,但都无济于事。但是,在Windows cmd命令的其他任何地方使用单引号和/或双引号似乎都有效。
是否有解决方法或者说我只是在尝试过多的doskey操作?
2个回答

6
这应该就可以了。告诉最后一个变量成为其他所有内容。
keycmd=echo plink -l user -pw password $1 -batch $*

2

尽管您可能在最后一个参数中有空格(使用$*,如wild2010答案所示),但通常情况下,在doskey命令中无法包含带有空格的参数。

请参见使用Doskey

不幸的是,虽然参数可以是长文件名,但即使用引号括起来,也不能包含空格。
如果文件名包含空格,则必须使用**名称的8.3版本**。我不知道有什么解决方法。

DosKey宏也可以使用$*,称为“全局可替换参数”。
这必须是宏的最后一部分,并由不是宏名称或分配给编号参数的命令行上的任何内容替换。
如果将上述示例重写为:

DOSKEY D2F=DIR $1 $g $*

那么长文件名(带有空格)可以用作最终参数,但用作 $1 代替的路径名仍然不能包含带有空格的目录名。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接