我正在创建一些我经常使用的常见doskey命令。我试图在doskey宏中有多个变量,有时变量中会有空格。我试过引用变量值,但它不起作用。唯一可行的方法就是在宏字符串的末尾添加更多变量。
我想做的是: doskey keycmd = plink -l user -pw password $ 1 -batch $ 2 然后按如下方式执行:c:> keycmd主机名“dir / p / users”
doskey在执行时看到的是:$ 1 =主机名,$ 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做太多事情?
答案 0 :(得分:3)
这应该这样做。告诉最后一个var是其他一切
keycmd=echo plink -l user -pw password $1 -batch $*
答案 1 :(得分:0)
虽然最后一个参数中可能包含空格(使用wild2010 answer中的$*
),但通常不可能包含参数在doskey命令中使用空格。
请参阅Using Doskey:
不幸的是,尽管参数可以是长文件名,但它不能包含空格,即使用引号括起来也是如此 如果文件名包含空格,则必须** use the 8.3 version of the name 。我知道这个**没有工作。
DosKey宏也可以使用
$*
,这被称为“全局可替换参数”。
这必须是宏的最后一部分,并且由命令行上不是宏名称或分配给编号参数的任何内容替换。
如果上面的例子被重写为:
DOSKEY D2F=DIR $1 $g $*
然后可以使用long filesnames-with-spaces作为最终参数 - 但用作
$1
的替代的路径名仍然不能包含带空格的目录名。