在 PS 中使用 Foreach 创建 Zip 不会产生任何结果

在 PS 中使用 Foreach 创建 Zip 不会产生任何结果

我有一个小用例,我需要压缩目录内的每个目录(子目录是平面的,所以不用担心递归),尝试使用 PS 中的简单一行代码执行此操作,结果没有任何结果,我甚至无法调试。话虽如此,但对于 Powershell 我还很陌生。

这是我目前正在使用但无效的方法:

$directories = Get-ChildItem -Path . -Directory
foreach($directory in $directories) { Compress-Archive -Path $directory.FullName -DestinationPath "$($directory.FullName).zip" }

控制台短暂闪烁,提示 zip 命令已运行,但没有输出 - 我只是试图写入目标目录所在的同一目录。我已经进行了健全性检查,以查看我是否在对象上使用正确的属性,并且 foreach 循环产生了我期望的结果:

$directories = Get-ChildItem -Path . -Directory
foreach($directory in $directories) { echo $directory.FullName }

作为另一项健全性测试,我创建了一系列虚拟目录,其中包含一个小文件,遵循一个简单的方案,增加一个后缀整数。例如:test1,test2等。并做了一个类似的测试,但使用for循环:

for($num = 1; $num -le 3; $num++) { Compress-Archive ".\test$num\" "test$num.zip" }

它确实正确地从测试目录中生成了 zip 文件。我很困惑为什么 foreach 循环遍历获取调用的结果Get-ChildItem没有受到欢迎,因为Compress-Archive我可以验证它确实遍历了每个目录。

答案1

对我的特定用例的回答是Compress-Archive需要使用-LiteralPath参数而不是-Path参数。

相关内容