2013-12-11 49 views
1

我有一個腳本根據日期將文件和壓縮文件壓縮成一個包。我將如何單獨壓縮文件(可能是foreach)並讓它們保持在同一目錄中?我還在$ FileSet2上發生錯誤。如何在PowerShell中壓縮單個文件

Function Zip 
{ 
    Param 
    (
     [string]$FileZip 
     , 
     [string[]]$NeedsZipping 
    ) 

    $Directory = Get-Location 
    Set-Location "C:\Users\lostd\Desktop\7-ZipPortable\" 
    .\7zG.exe A -tzip $FileZip $NeedsZipping | Out-Null 
    Set-Location $Directory 
} 

$filename = "tester" 
$CurrentTime = Get-Date 
$DaySet1 = "5" 
$DaySet2 = "10" 
$TargetFolder = "C:\Users\lostd\Documents\*.*" 
$LastMod = $CurrentTime.AddDays(-$DaySet1) 
$LastMod2 = $CurrentTime.AddDays(-$DaySet2) 
$FileSet1 = Get-Childitem $TargetFolder -Recurse | Where {$_.LastMod -lt "$LastMod2"} 
$FileSet2 = Get-Childitem $TargetFolder -Recurse | Where {$_.LastMod -gt $LastWrite -AND $_.LastMod -lt $LastMod2} 
#$FileSet1 

Zip C:\Users\lostd\Desktop\TEST.zip $FileSet1 

If(Test-Path C:\Users\lostd\Desktop\TEST.zip) 
{ 
    Remove-Item $FileSet2 
} 

在此先感謝

回答

1

好的,花了一些時間,但我明白了。有幾個問題。您將需要更換的情況如下:與

foreach ($File in $Files) 
{ 
    Set-Location "C:\Users\lostd\Documents\purge\" 
    $Zipname = $File.Name.Replace(".", "-") 
    Zip C:\Users\lostd\Documents\purge\$zipname $File 
} 
sleep 5 
foreach ($File in $Files) 
{ 
    Remove-Item -Force $File 
} 

Zip C:\Users\skochkr\Desktop\TEST.zip $Files 
If(Test-Path C:\Users\lostd\Desktop\TEST.zip) 
    {Remove-Item $Files2} 

將壓縮每個文件在$Files單獨(而不是把裏面所有的內容之一zip文件),而其名稱不變和擴展類型。壓縮文件的目的地也需要設置到所需的位置,否則壓縮文件被髮送到7-Zip所在的文件夾。

0

上$ Files2的錯誤是,你的LT/GT圍繞翻轉錯誤的方式。

你是在說LastWriteTime比10天前更舊(大於),而不到20天前,這總是錯誤的。我相信你想翻轉兩個,這樣你就可以得到LastWriteTime小於10天前的文件,但是比20天前更老(更大)。

對於捆綁它們,您能否提供更多關於如何捆綁它們的信息/說明以及文件應該放在哪裏?

+0

現在,'$ File'中的所有文件都被壓縮到一個文件中。我希望所有符合'$ File'標準的文件都被單獨壓縮。我認爲這樣做的最好方法是將'$ File'和'$ File2'放入數組中,然後使用'foreach'循環。我希望它們被放置在它們最初所在的同一個目錄中。我只是不知道該怎麼做。 –

相關問題