带引号的Powershell参数$ args [0]

时间:2015-02-02 16:11:39

标签: powershell

我正在运行从批处理调用的PowerShell脚本,该脚本将文件名作为第一个参数传递。 我使用脚本内部:

$file = Get-Item -LiteralPath $args[0]

但是当文件名包含引号(I.E:my'file.txt)时,get-item会触发错误。我试图删除-LiteralPath参数,但问题是一样的。 脚本的语法是

$ file = Get-Item -LiteralPath $ args [0] write-host $ file cmd / c暂停

如果我针对我的' file.txt运行脚本,我会得到:

  • C:\ m \ tag \ testscript.ps1' C:\ m \ tag \ my' file.txt' <<<<
    • CategoryInfo:ParserError :(:String)[],ParentContainsErrorRecordException
    • FullyQualifiedErrorId:TerminatorExpectedAtEndOfString

3 个答案:

答案 0 :(得分:0)

你如何传递参数?

这有效:

.{gi -literalpath $args[0]} "my'file.txt"

答案 1 :(得分:0)

我认为,当PowerShell看到文件名cmd已经删除任何环绕双引号时,PowerShell会将单引号视为解析错误。尝试指定文件名,如此

my''file.txt

答案 2 :(得分:0)

假设您在文件批处理中以这种方式传递路径:

powershell.exe  C:\path\myscript.ps1 "%1%"

你需要逃避引用:

powershell.exe  C:\path\myscript.ps1 \"%1%\"