将带有单引号的参数传递到.PS1脚本

时间:2019-06-25 05:38:42

标签: windows powershell registry contextmenu

我正在测试一个将在win10右键单击上下文菜单中放入的PS脚本,该脚本仅接受路径信息,然后将其回显到我的终端窗口。 注册表项如下: Computer\HKEY_CLASSES_ROOT\*\shell\MyScript\command @="powershell.exe -window hidden -command .'\"G:\\path to my script\\MyScript.ps1\"' '%V'"

脚本仅为$args

对于大多数常规路径,它运行良好。现在,我陷入一种情况,文件名包含一个单引号,例如:"D:\John's file.txt"

它抛出一个错误:

The string is missing the terminator: '. + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

我应该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

我自己找到了解决方案。

  1. 根据this post,注册表项必须修改为:Computer\HKEY_CLASSES_ROOT\*\shell\MyScript\command @="powershell.exe -window hidden -file \"G:\\path to my script\\MyScript.ps1\" "%V""

使用-command而不是-file,并且%V周围的单引号应该是双引号。

2。要获取完整的路径,您必须使用-join运算符像这样(如果路径包含空格)连接以空格分隔的字符串:

$path = $args -join " "

Powershell v6用户可以使用join-string cmdlet。