【问题标题】:Doskey macro with spaces in passed variable?传递变量中带有空格的Doskey宏?
【发布时间】:2013-01-18 01:00:10
【问题描述】:

我正在创建一些我经常使用的常用 doskey 命令。我试图在 doskey 宏中有多个变量,有时一个变量中会有空格。我试过引用变量值,但它不起作用。唯一有效的方法就是在宏字符串的末尾添加更多的变量。

我想做的是: doskey keycmd=plink -l 用户 -pw 密码 $1 -batch $2 然后执行如下:c:> keycmd hostname "dir /p /users"

doskey 在执行时看到的是:$1=hostname, $2="dir, and "dir 不是命令并且 /p 和 /users 被完全删除。

为了让它工作,我必须这样定义它: doskey keycmd=plink -l 用户 -pw 密码 $1 -batch $2 $3 $4 并执行如下: c:> keycmd hostname dir /p /users

有没有办法可以将“dir /p /users”分组到一个 $2 变量中?对于 doskey 变量参数,您只能得到 9、$1..$9。最终我可以用完复杂的命令。我试过单引号和双引号无济于事......但单引号和/或双引号似乎在 Windows cmd 命令的其他任何地方都有效。

是否有解决方案,或者我只是想用 doskey 做太多事情?

【问题讨论】:

    标签: variables macros spaces


    【解决方案1】:

    应该这样做。告诉最后一个 var 是其他一切

    keycmd=echo plink -l user -pw password $1 -batch $*
    

    【讨论】:

      【解决方案2】:

      虽然您可能在最后一个参数中有空格(使用 $*,如在 wild2010answer 中),但通常不可能在 doskey 命令中包含带空格的参数.

      Using Doskey:

      很遗憾,虽然参数可以是长文件名,但不能包含空格,即使用引号括起来。
      如果文件名包含空格,则必须**use the 8.3 version of the name。我知道没有解决办法**。

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

      DOSKEY D2F=DIR $1 $g $*
      

      那么长文件名带空格可以用作最后一个参数 - 但用作$1 替代的路径名仍然不能包含带空格的目录名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-09
        • 1970-01-01
        • 2013-10-21
        • 2020-11-02
        • 2018-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多