AVT007 Ответов: 1

Я хочу создать сценарий powershell, в котором файлы журнала сжимаются в соответствии с датой его имени файла.


Я нашел в этой группе скрипт о сжатии файла в соответствии с датой изменения файла. Но то, что я ищу, - это сжатие файлов журналов, которые находятся в формате .jrn, и имя файла похоже на это ABCD20200710.jrn. И сжатие должно быть сделано после 90 дней генерации журнала. Я имею в виду 90 дней после того, как файл будет сгенерирован в соответствии с датой имени файла. Кроме того, я просто пытаюсь писать сценарии, а не очень хороший пользователь. Пожалуйста, веди меня.

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

#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

Garth J Lancaster

формат вашего файла журнала - "ABCD20200710.jrn" - всегда ли перед датой стоит всего 4 символа (например, 'ABCD')?

AVT007

Да. Это всего лишь 4 символа. Это лог-файл банкомата.

1 Ответов

Рейтинг:
0

Garth J Lancaster

ладно, посмотри на это. жирный биты - я оставил в исходном коде, закомментировал с помощью"#".. NB, все непроверенные, просто с моей макушки

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

#move the files to a temporary location
foreach($file in $files)
{
	#$fileLastModifieddate = $file.LastWriteTime
    $filenameFromPath = [System.IO.Path]::GetFileName($file)
    $dateFromFilename = $filenameFromPath.Substring(4,8)
    $fileCreateDate = [datetime]::parseexact($dateFromFilename, 'yyyyMMdd', $null)
	#if(((Get-Date) - $fileLastModifiedDate) -gt $timespan)
    if(((Get-Date) - $fileCreateDate) -gt $timespan)
	{


Код " # " и т. д. Может быть удален, когда он работает, и эти мои последовательности могут быть объединены в некоторой степени, но это облегчает показать, почему && что, если я сначала выражу их в длинной форме