rohith naik Ответов: 2

Я хочу создать скрипт powershell для архивирования файлов старше недели в папке и удаления исходных файлов в случае успеха


Привет, я новичок в написании сценариев powershell. Я нашел этот[^] статья о создании zip-папки, но я не знаю, как конкретно найти файлы старше 1 недели.

Что я уже пробовал:

Я попытался использовать цикл foreach и скопировать файлы во временный каталог, а затем использовать ссылку, которую я нашел ранее, но синтаксис Powershell работает неправильно.

[no name]

Возможно, вы можете перефразировать свой вопрос, чтобы на самом деле включить вопрос и, возможно, код, с которым у вас возникли проблемы. В нынешнем виде ваш вопрос звучит скорее так, как будто вы хотите, чтобы кто-то написал ваш код за вас.

rohith naik

Ну, это совсем не то, что я имел в виду. Исправлена проблема и опубликовано решение.

Richard MacCutchan

но синтаксис Powershell работает неправильно.
И вы думаете, что мы можем догадаться, где и почему?

Если у вас есть проблема, то, пожалуйста, напишите все соответствующие подробности.

rohith naik

Спасибо, синтаксис powershell идет выше моей головы, однако я опубликовал свое решение после того, как понял его. Пожалуйста, не стесняйтесь сказать мне, что можно улучшить.

rohith naik

У меня есть еще одна проблема, которую я только что выяснил. Я вставляю zip-файл в тот же каталог, что и основной файл. Это означало бы, что zip-файлы, которые я создал на этой неделе, будут снова заархивированы на следующей неделе. Я использовал этот синтаксис, но это снова кажется неправильным

$rootFolder = "C:\MyFiles\Output"
$tempVariable = $rootFolder + "*.*"
$files = Get-ChildItem -Path $rootFolder -exclude *.zip

Не могли бы вы сказать мне, что случилось?

2 Ответов

Рейтинг:
12

rohith naik

#get the list of files in the original folder
$rootFolder = "C:\MyFiles\Output"
$tempVariable = $rootFolder
$files = Get-ChildItem -Path $rootFolder 

#create a temporary folder using today's date
$tempFolderRoot = "C:\Temp_"
$date = Get-Date
$date = $date.ToString("yyyy-MM-dd")
$tempFinalFolder = "$tempFolderRoot$date"
New-Item -ItemType directory -Path $tempFinalFolder -Force

#decide how long back to go
$timespan = new-timespan -days 7

#move the files to a temporary location
foreach($file in $files)
{
	$fileLastModifieddate = $file.LastWriteTime
	if(((Get-Date) - $fileLastModifiedDate) -gt $timespan)
	{
		Move-Item "$rootFolder\$file" -destination $tempFinalFolder
	}
}

$CompressionToUse = [System.IO.Compression.CompressionLevel]::Optimal
$IncludeBaseFolder = $false
$zipTo = "{0}\Archive_{1}.zip" -f $rootFolder,$date

#add the files in the temporary location to a zip folder
[Reflection.Assembly]::LoadWithPartialName( "System.IO.Compression.FileSystem" )
[System.IO.Compression.ZipFile]::CreateFromDirectory($tempFinalFolder, $ZipTo, $CompressionToUse, $IncludeBaseFolder)

#Remove-Item $tempFinalFolder -RECURSE


Рейтинг:
0

rohith naik

Спасибо. Оказывается, я неправильно записывал полные имена файлов. Я добавил свое решение ниже

Maciej Los

Интересный... Был ли мой ответ полезен в поиске решения? Если да, то было бы неплохо, чтобы мой ответ был принят как решение (зеленая кнопка), и было бы неплохо посмотреть, сколько он стоит (используйте систему голосования)...