Как заархивировать отдельные файлы в powershell

У меня есть скрипт, который берет файлы и упаковывает их в пакет в зависимости от даты. Как мне заархивировать файлы по отдельности (возможно, 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
}

заранее спасибо


person Ben Scotch    schedule 11.12.2013    source источник


Ответы (2)


Хорошо, это заняло некоторое время, но я понял это. Было несколько проблем. Вам нужно будет заменить следующее:

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.

person Ben Scotch    schedule 12.12.2013

Ошибка в $Files2 заключается в том, что ваш lt/gt перевернут неправильно.

Вы говорите, где LastWriteTime старше (больше), чем 10 дней назад, И меньше 20 дней назад, что всегда неверно. Я полагаю, что вы хотите перевернуть эти два места, чтобы получить файлы, в которых LastWriteTime меньше 10 дней назад, но старше (больше), чем 20 дней назад.

Что касается их объединения, можете ли вы предоставить дополнительную информацию/разъяснения о том, как вы хотите их связать и куда должны идти файлы?

person HAL9256    schedule 11.12.2013
comment
Сейчас все файлы в $File заархивированы в один файл. Я хочу, чтобы все файлы, соответствующие критериям $File, были заархивированы по отдельности. Я думаю, что лучший способ сделать это — поместить $File и $File2 в массив, а затем использовать цикл foreach. Я хочу, чтобы они были помещены в тот же каталог, где они изначально расположены. Я просто не знаю, как это сделать. - person Ben Scotch; 12.12.2013