无法使用 ProcessStartInfo 参数将“”传递给 powershell,C#
Can't pass through "" to powershell using ProcessStartInfo arguments, C#
我无法将参数传递给包含 ""
的 powershell。当我使用等效代码但将应用程序更改为 cmd 时,""
能够通过。
我希望 powershell 执行的参数是:
Copy-Item -Path "{Working Directory}\W11F-assets\" -Destination "C:\Windows\W11F-assets" -Recurse
这是调用该函数的代码:
ProcessStartInfo movefile = new ProcessStartInfo("powershell.exe");
string flocation = Directory.GetCurrentDirectory();
movefile.UseShellExecute = true;
movefile.Arguments = "Copy-Item -Path \"" + flocation + "\W11F-assets\" -Destination \"C:\Windows\W11F-assets\" -Recurse";
Process.Start(movefile);
能够通过将 \"
替换为 '
来解决问题。
当命令传递给 PowerShell CLI 的(隐含位置)-Command
(-c
) 参数时,任何 未转义 "
字符。在 command-line 处理期间被 剥离 ,并且只有 然后 是参数(space-joined 形成单个字符串,如果有是多个)解释为 PowerShell 代码。
因此:
"
作为命令一部分保留的字符必须 \"
-转义。
此外,为了防止可能不需要的空白规范化(将多个相邻空格折叠成一个),最好将命令包含在未转义的嵌入式 "..."
中。
为了完整地说明一个应该有效的解决方案,明确使用 -Command
和 -NoProfile
以避免通常不必要地加载配置文件,并使用额外的空间来使概念清晰,采取内插 ($
) 逐字 (@
) 字符串的优点(其中 \
可以使用 as-is 和 "
必须转义为 ""
):
movefile.Arguments =
$@"-NoProfile -Command "" Copy-Item -Path \""{flocation}\W11F-assets\"" -Destination \""C:\Windows\W11F-assets\"" -Recurse "" ";
我无法将参数传递给包含 ""
的 powershell。当我使用等效代码但将应用程序更改为 cmd 时,""
能够通过。
我希望 powershell 执行的参数是:
Copy-Item -Path "{Working Directory}\W11F-assets\" -Destination "C:\Windows\W11F-assets" -Recurse
这是调用该函数的代码:
ProcessStartInfo movefile = new ProcessStartInfo("powershell.exe");
string flocation = Directory.GetCurrentDirectory();
movefile.UseShellExecute = true;
movefile.Arguments = "Copy-Item -Path \"" + flocation + "\W11F-assets\" -Destination \"C:\Windows\W11F-assets\" -Recurse";
Process.Start(movefile);
能够通过将 \"
替换为 '
来解决问题。
当命令传递给 PowerShell CLI 的(隐含位置)-Command
(-c
) 参数时,任何 未转义 "
字符。在 command-line 处理期间被 剥离 ,并且只有 然后 是参数(space-joined 形成单个字符串,如果有是多个)解释为 PowerShell 代码。
因此:
"
作为命令一部分保留的字符必须\"
-转义。此外,为了防止可能不需要的空白规范化(将多个相邻空格折叠成一个),最好将命令包含在未转义的嵌入式
"..."
中。
为了完整地说明一个应该有效的解决方案,明确使用 -Command
和 -NoProfile
以避免通常不必要地加载配置文件,并使用额外的空间来使概念清晰,采取内插 ($
) 逐字 (@
) 字符串的优点(其中 \
可以使用 as-is 和 "
必须转义为 ""
):
movefile.Arguments =
$@"-NoProfile -Command "" Copy-Item -Path \""{flocation}\W11F-assets\"" -Destination \""C:\Windows\W11F-assets\"" -Recurse "" ";