如何使用PowerShell的Compress-Archive命令在压缩包中保留文件夹结构?
保留文件夹结构压缩指定EXE文件的PowerShell方案
你遇到的问题其实是Compress-Archive的默认行为导致的:当你直接指定具体的文件路径(比如.\Client\*.exe)时,它会把所有文件直接放到压缩包根目录,不会保留父文件夹结构。下面有两种简单的解决方法:
方法一:通过指定文件夹+Include参数实现
直接将Client和Server文件夹作为路径,再用-Include过滤出其中的EXE文件,这样压缩时会自动保留文件夹结构:
Compress-Archive -Path .\Client, .\Server -Include *.exe -DestinationPath ('Build_' + (Get-Date -Format yyyy.MM.dd) + '.zip')
原理:当Path参数指向文件夹时,Compress-Archive会保留该文件夹的层级,-Include *.exe则确保只打包文件夹内的EXE文件,不会包含其他类型的文件。
方法二:通过Get-ChildItem传递文件对象
先用Get-ChildItem获取目标EXE文件的对象(包含相对路径信息),再传递给Compress-Archive,同样能保留结构:
$targetFiles = Get-ChildItem -Path .\Client\*.exe, .\Server\*.exe Compress-Archive -InputObject $targetFiles -DestinationPath ('Build_' + (Get-Date -Format yyyy.MM.dd) + '.zip')
原理:Get-ChildItem返回的FileInfo对象包含了文件的完整相对路径,Compress-Archive会根据这些路径在压缩包内重建对应的文件夹结构。
两种方法都能达到你想要的效果,推荐第一种,更简洁直接~
内容的提问来源于stack exchange,提问作者pexxxy
相关产品推荐
相关产品推荐

