如何让 powershell 输出带有引号的变量
How to get powershell to output variable with quotes around it
尽管使用 'about_quoting_rules' 查看了有关单引号和双引号的文档,但我似乎无法获得我正在寻找的输出。
一点背景故事:
我有一个 excel 文档,我正在使用 powershell 在每个条目上创建一个 foreach。这反过来又被用来生成一个 robocopy 命令来启动同步作业。
我的脚本中与此相关的部分如下:
Foreach($script in $roboSource)
{
$StandardSwitches = "/copy:DAT /s /dcopy:DAT /V /L"
$log = "/log:`"$($logPath)$($logFileName)`"" #`
$FileSource = "$($script.a)"
$FileDestination = "$($script.a)"
$RoboArgs = "I:\" + $FileSource + " " + "Z:\" + $FileDestination + " " + $StandardSwitches + " " + $log
}
所以,现在 $RoboArgs 输出这个:
I:\XXXXX\XXXXX\X\XXXXXXX\XXXXX\XXXX Z:\XXXXX\XXXXX\X\XXXXXXX\XXXXX\XXXX /copy:DAT /s /dcopy:DAT /V /L /log:"C:\XXXXX\XXXXX\X\XXXXXXX\XXXXX\XXXX"
我需要$RoboArgs输出的是这样的:
"I:\XXXXX\XXXXX\X\XXXXXXX\XXXXX\XXXX" "Z:\XXXXX\XXXXX\X\XXXXXXX\XXXXX\XXXX" /copy:DAT /s /dcopy:DAT /V /L /log:"C:\XXXXX\XXXXX\X\XXXXXXX\XXXXX\XXXX"
我尝试将反引号添加到字符串中,并将字符串和变量封装在一起:
$RoboArgs = `""I:\" + $FileSource`"" + " " + "Z:\" + $FileDestination + " " + $StandardSwitches + " " + $log
但无论我尝试什么,都没有得到我正在寻找的输出。任何朝着正确方向的推动都会非常有帮助和感激!
尝试用单引号分隔您的字符串。内部的任何双引号都将保留在结果字符串中。
示例:
$stringWithQuotes = '"' + (pwd) + '"'
如果你想在字符串中使用单引号,你也可以反过来做:
$stringWithQuotes = "'" + (pwd) + "'"
我建议使用 PowerShell 的 string-formatting operator, -f
:
$RoboArgs = '"I:\{0}" "Z:\{1}" {2} {3} {4}' -f
$FileSource, $FileDestination, $StandardSwitches, $log
使用 '...'
(单引号)作为分隔符允许您按原样嵌入 "
个实例。
{0}
是第一个 RHS 操作数的占位符,{1}
是第二个,依此类推。
在 Powershell 中 `
后跟引号有效,就像其他语言中的 '\'
:
例如:
"`"toto`""
打印
"toto"
尽管使用 'about_quoting_rules' 查看了有关单引号和双引号的文档,但我似乎无法获得我正在寻找的输出。
一点背景故事:
我有一个 excel 文档,我正在使用 powershell 在每个条目上创建一个 foreach。这反过来又被用来生成一个 robocopy 命令来启动同步作业。
我的脚本中与此相关的部分如下:
Foreach($script in $roboSource)
{
$StandardSwitches = "/copy:DAT /s /dcopy:DAT /V /L"
$log = "/log:`"$($logPath)$($logFileName)`"" #`
$FileSource = "$($script.a)"
$FileDestination = "$($script.a)"
$RoboArgs = "I:\" + $FileSource + " " + "Z:\" + $FileDestination + " " + $StandardSwitches + " " + $log
}
所以,现在 $RoboArgs 输出这个:
I:\XXXXX\XXXXX\X\XXXXXXX\XXXXX\XXXX Z:\XXXXX\XXXXX\X\XXXXXXX\XXXXX\XXXX /copy:DAT /s /dcopy:DAT /V /L /log:"C:\XXXXX\XXXXX\X\XXXXXXX\XXXXX\XXXX"
我需要$RoboArgs输出的是这样的:
"I:\XXXXX\XXXXX\X\XXXXXXX\XXXXX\XXXX" "Z:\XXXXX\XXXXX\X\XXXXXXX\XXXXX\XXXX" /copy:DAT /s /dcopy:DAT /V /L /log:"C:\XXXXX\XXXXX\X\XXXXXXX\XXXXX\XXXX"
我尝试将反引号添加到字符串中,并将字符串和变量封装在一起:
$RoboArgs = `""I:\" + $FileSource`"" + " " + "Z:\" + $FileDestination + " " + $StandardSwitches + " " + $log
但无论我尝试什么,都没有得到我正在寻找的输出。任何朝着正确方向的推动都会非常有帮助和感激!
尝试用单引号分隔您的字符串。内部的任何双引号都将保留在结果字符串中。
示例:
$stringWithQuotes = '"' + (pwd) + '"'
如果你想在字符串中使用单引号,你也可以反过来做:
$stringWithQuotes = "'" + (pwd) + "'"
我建议使用 PowerShell 的 string-formatting operator, -f
:
$RoboArgs = '"I:\{0}" "Z:\{1}" {2} {3} {4}' -f
$FileSource, $FileDestination, $StandardSwitches, $log
使用
'...'
(单引号)作为分隔符允许您按原样嵌入"
个实例。{0}
是第一个 RHS 操作数的占位符,{1}
是第二个,依此类推。
在 Powershell 中 `
后跟引号有效,就像其他语言中的 '\'
:
例如:
"`"toto`""
打印
"toto"