相关疑难解决方法(0)

如何将空格参数转义到在 VS 构建后事件中运行的 PS 脚本

更新1:

再次仔细查看输出后,我有点明白了。通过在右括号和引号之间添加尾随空格,它可以工作:

powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersion.ps1" "$(ProjectDir) " "$(TargetDir) "
Run Code Online (Sandbox Code Playgroud)

我怀疑 PowerShell 以某种方式解释了)".

有没有更优雅的方法来解决这个问题?

更新2

这很奇怪。我有另一个脚本可以进行清理并在)和之间没有空格的情况下工作",如下所示:

powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersionCleanup.ps1" "$(ProjectDir)"
Run Code Online (Sandbox Code Playgroud)

但是添加尾随空格将导致它失败,因为它在内部将文件名附加到路径,因此路径将不正确。

如果有人理解这一点,我很乐意接受该解释作为正确答案!


原来的:

我在 VisualStudio 中有以下预构建命令,我想用它从 Git 标签注入版本:

powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersion.ps1" $(ProjectDir) $(TargetDir)
Run Code Online (Sandbox Code Playgroud)

如果路径 $(SolutionDir) 不包含空格(该路径也将出现在 $(ProjectDir) 或 $(TargetDir) 中),则此方法可以正常工作。

当路径 $(SolutionDir) 确实包含空格时,脚本似乎按预期启动,但参数未正确传递,我无法弄清楚如何在 PS 脚本的参数中转义它们。

我尝试添加 sing "、三重 """ 以及 ',这给出了以下内容(每个 PS 命令尝试不同的方法来转义空格):

powershell -ExecutionPolicy ByPass -File "$(SolutionDir)\BuildScripts\InjectGitVersion.ps1" $(ProjectDir) $(TargetDir)
Run Code Online (Sandbox Code Playgroud)

参数[0]:

D:\VisualStudio

参数[1]:

项目\software_git_repo\ProgramEditor\

powershell -ExecutionPolicy ByPass -File …
Run Code Online (Sandbox Code Playgroud)

powershell parameter-passing visual-studio

6
推荐指数
2
解决办法
1632
查看次数