仅将选定的文件和文件夹发送到Compress-Archive

时间:2018-02-19 21:06:19

标签: powershell

内部c:\test\我有:

  • \ DIR1
  • \ DIR2
  • \ DIR3

  • FILE1.TXT
  • FILE2.TXT
  • file3.txt
  • file4.txt

我只想压缩dir1dir2file1.txtfile2.txt

我使用以下脚本压缩选定的文件夹

$YourDirToCompress="C:\test\"
$ZipFileResult=".\result.zip"
$DirToInclude=@("dir1", "dir2")

Get-ChildItem $YourDirToCompress -Directory  | 
           where { $_.Name -in $DirToInclude} | 
              Compress-Archive -DestinationPath $ZipFileResult -Update

我如何将所选文件(file1.txtfile2.txt)添加到最终压缩result.zip

理想情况下,我希望一次性进行压缩,这意味着我会传递所选文件和文件夹的列表,然后进行压缩。

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

Get-ChildItem -Path $YourDirToCompress | Where {$_.Name -in $DirToInclude} | Compress-Archive -DestinationPath $ZipfFileResult -Update

Compress-Archrive能够压缩文件和目录。因此,在此代码中,我们使用Get-ChildItem而不使用-Directory标志,该标志将返回$YourDirToCompress

根级别的所有文件和目录

然后我们将这些文件/文件夹传递给Compress-Archive cmdlet,就像我们之前一样。

假设文件位于$YourDirToCompress

的根级别

答案 1 :(得分:0)

如果您压缩文件夹,则所有文件和子文件夹也会被压缩。

那么,要压缩已经压缩的文件夹中的特定文件需要做些什么?

您是说这些文件只存在于\dir3

如果是这样,你只需使用for循环和if语句。 匹配dir1和dir2然后压缩,然后匹配dir3中的file1和file2然后压缩。