我想压缩一个文件夹。在Linux之类的操作系统上,这很容易,对于系统管理员来说,安装apt install zip
之类的命令行zip工具很容易。不幸的是,在Windows上并不是那么简单。
我发现一个简单的解决方法是,我可以在这样的Powershell脚本中使用Compress-Archive
:
Compress-Archive -Path $folder -CompressionLevel Optimal -DestinationPath $zipPath
,然后在项目构建之前或之后使用folder
和zipPath
调用它。
要做到这一点,我的CMakeLists.txt
将显示以下一行:
execute_process(COMMAND powershell ${powershellScriptPath} "\"${folderPathToZip}\"" "\"${outputZipPath}\"" OUTPUT_QUIET)
这很好, 我必须允许脚本在我的计算机上全局且不安全地运行。
我希望它可以在任何Windows计算机上运行,而不必要求人们进行任何修改。我也不喜欢让其他开发人员出于显而易见的原因在全球范围内不安全地允许脚本的想法。我希望我的开发人员能够打开项目并按构建,并且一切都能正常进行,这是实现该目标的最后一件事。
是否有一种方法可以通过更改程序的调用方式来使该脚本运行?还是我陷入困境,不得不寻找另一种方法来做到这一点?还是有某种方法可以自动将该特定文件列入白名单,而无需用户执行任何其他步骤?
解决此问题的另一种方法是让我编写自己的zip实用程序,该实用程序在每个构建版本上均被调用以将内容压缩,但这是很多工作的感觉,因此感觉非常难以操作。 / p>
编辑:我可以安全地假设计算机已安装Powershell,并且相对较新
答案 0 :(得分:1)
您可以通过将-ExecutionPolicy Bypass
传递到PowerShell CLI(对于Windows PowerShell为powershell.exe
)来绕过有效的PowerShell执行策略:
execute_process(COMMAND powershell -ExecutionPolicy Bypass -File ${powershellScriptPath} ${folderPathToZip} ${outputZipPath} OUTPUT_QUIET)
还请注意,我正在使用-File
来指示Windows PowerShell执行脚本文件,因为它默认为-Command
[1] < / sup>,它将更改参数 [2] 的解释;我不熟悉cmake
,但希望它可以在默认情况下/根据需要在参数周围提供双引号,而使用-File
就足够了。
[1]请注意,PowerShell Core 默认为-File
。
[2]有关详细信息,请参见this answer的第二部分和后续部分。