递归检查文件并在存在特定文件类型时执行zip

时间:2015-06-21 11:57:18

标签: windows powershell batch-file recursion cmd

我的问题陈述:

Main Folder
-SubFolder1
--1.jpg
--2.jpg
-SUbFolder2
--Subsubfolder
---1.jpg
---2.jpg

我有这个包含子目录的主文件夹,在最后一个子目录中有图像。

现在,我希望实现的是

  1. 以递归方式检查图像文件是否存在于子目录
  2. 如果是,请压缩该子目录中的所有图像文件,并根据相应的子目录名称命名它们。
  3. 我有这个命令来实现这个目标:

    "C:\Program Files\PeaZip\res\7z\7z.exe" a -tzip -mm=Deflate -mmt=on -mx5 -mfb=32 -mpass=1 -sccUTF-8 -mem=AES256 "-wC:\exp\" "C:\exp\subdirname.zip" "C:\exp\*.jpg" 
    

    现在我真正的问题是,我不知道如何将所有这些拼凑在一起。阅读有关stackoverflow的大量问题,但它们没有任何帮助。 无论我做了什么实验,都与我希望达到的目标完全无关。

1 个答案:

答案 0 :(得分:1)

如果使用Get-ChildItem cmdlet检索所有图像,则可以按目录对其进行分组,并获取所需的所有信息:

$root = 'c:'
$7zipPath = "C:\Program Files\PeaZip\res\7z\7z.exe"

Get-ChildItem $root -recurse -Filter '*.jpg' | group Directory | select -expand name | foreach {
    $directoryName = get-item $_ | select -expand name
    $directoryPath = $_
    &$7zipPath a -tzip -mm=Deflate -mmt=on -mx5 -mfb=32 -mpass=1 -sccUTF-8 -mem=AES256 "-wC:\exp\" "C:\exp\$directoryName.zip" "$directoryPath\*.jpg"
}