将bat代码移植到PowerShell

时间:2012-02-05 12:48:27

标签: shell powershell mercurial batch-file

将我的bat脚本移植到PowerShell。两个问题:$info扩展为"$info"等字符串;当从某个文件运行命令时,会破坏参数(在交互模式下只出现第一个问题。控制台输出“hg tip:invalid arguments”)。

命令:

hg tip --template "<?php\r\n// ќв®  ўв®¬ вЁзҐбЄЁ бЈҐ­ҐаЁа®ў ­­л© д ©« б Ё­д®а¬ жЁҐ© ® ⥪г饬 ЎЁ«¤Ґ ¬®¤г«п\r\n$info = array(\r\n'rev' => '{rev}',\r\n'date' => '{date|isodate}',\r\n'changeset' => '{node}',\r\n);" > modules/video/version.php

2 个答案:

答案 0 :(得分:2)

另外,另一种方法是使用单引号而不是现在使用的双引号。

更新

好的,基本上你有三种方法。

  • 单引号 - 不评估表达式。但是你需要逃避单引号。
  • 双引号 - 表达式被评估。所以,如果你想使用$ sign,你需要逃避它。
  • Here-strings - 单引号或双引号(已评估/未评估)。字符串可以跨越多行。如果使用单引号方法,则无需转义任何内容

第三种方法的例子:

[12:06:58 PM] ~> $str = @'
'$'`#'"<>\/@
'@ 


_______________________________________________________________________________________________________________________________________________________________________________________________
[12:07:15 PM] ~> $str
'$'`#'"<>\/@

答案 1 :(得分:1)

要将$info评估为变量,您必须将其写为`$info。像:

 hg tip --template "<?php\r\n// ќв®  ўв®¬ вЁзҐбЄЁ бЈҐ®ў © д ©« б Ё®а¬ жЁҐ© ® ⥪г饬 ЎЁ«¤Ґ ¬®¤г«п\r\n`$info = array(\r\n'rev' => '{rev}',\r\n'date' => '{date|isodate}',\r\n'changeset' => '{node}',\r\n);" > modules/video/version.php

$是powershell关键字因此`$