2017-02-27 73 views
0

我想在每個文件夾裏遞歸一些位置,例如: 例如:C:\ Logs和zip文件到同一個文件夾。PowerShell腳本來壓縮多個文件夾內的文件遞歸

我需要跳過每個.zip文件。我不知道如何讓我的腳本來做到這一點:

function New-Zip 
{ 
    param([string]$zipfilename) 
    set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
    (dir $zipfilename).IsReadOnly = $false 
} 
function Add-Zip 
{ 
    param([string]$zipfilename) 

    if(-not (test-path($zipfilename))) 
    { 
     set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
     (dir $zipfilename).IsReadOnly = $false 
    } 

    $shellApplication = new-object -com shell.application 
    $zipPackage = $shellApplication.NameSpace($zipfilename) 

    foreach($file in $input) 
    { 
      $zipPackage.CopyHere($file.FullName) 
      Start-sleep -milliseconds 500 
    } 
} 
$targetFolder = 'C:\Logs' 
$now = Get-Date -Hour 0 -Minute 00 -Second 00 
$days = 5 
$lastWrite = $now.AddDays(-$days) 

Get-ChildItem $targetFolder -Recurse -Exclude *zip* | Where-Object { $_ -is [System.IO.FileInfo] } | ForEach-Object { 
    If ($_.LastWriteTime -lt $lastWrite) 
    { 
     $_ | New-Zip $($targetFolder + $_.Name + ".zip") 
     $_ | Add-Zip $($targetFolder + $_.Name + ".zip") 
    } 
} 
+0

的'CopyHere'方法是一個交互的shell功能,是不是d用於自動化(例如,不檢查錯誤)。我強烈推薦使用諸如'7z.exe'的命令行工具。 –

回答

0

您正在排除包含其名稱短語「拉鍊」因爲你擁有它的通配符任何一方的任何文件或文件夾:

Get-ChildItem $targetFolder -Recurse -Exclude *zip* 

要排除你只需要更新您的Exclude聲明zip文件,使其只zip文件擴展名匹配:

Get-ChildItem $targetFolder -Recurse -Exclude *.zip 
+0

我已糾正它。我仍然不知道如何進入這裏的文件夾和zip文件中的每個目錄。 – yodaa1

相關問題