如何在PowerShell中压缩单个文件

时间:2013-12-11 21:46:05

标签: loops powershell zip 7zip code-cleanup

我有一个脚本可以根据日期获取文件并将它们压缩成一个包。我如何单独压缩文件(可能是foreach)并让它们保留在同一目录中?我在$ FileSet2上也收到错误。

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
}

提前致谢

2 个答案:

答案 0 :(得分:1)

好的,花了一些时间,但我明白了。有一些问题。您需要替换以下内容:

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

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
}

这将单独压缩$Files中的每个文件(而不是制作一个包含所有内容的zip文件),同时保留相同的名称和扩展名类型。压缩文件的目标也需要设置到所需的位置,否则压缩文件将被发送到7-Zip所在的文件夹。

答案 1 :(得分:0)

$ Files2上的错误是你的lt / gt翻转错误。

你说的LastWriteTime比10天前更早(大于),而且不到20天前,这总是假的。我相信你想要翻转这两个文件,这样你就可以获得LastWriteTime小于10天前的文件,但是比20天前更早(大于)。

至于捆绑它们,您能提供更多关于如何捆绑它们的信息/说明,以及文件应该去哪里吗?