Doskey宏在传递变量中有空格?

时间:2013-02-02 23:59:34

标签: variables macros spaces

我正在创建一些我经常使用的常见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做太多事情?

2 个答案:

答案 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的替代的路径名仍然不能包含带空格的目录名。