locked
Powershell - Создать каталог с именем: текущая дата и дата модификации последнего файла. Заархивировать каталог. RRS feed

  • Вопрос

  • Добрый день!

    Есть каталог C:\SCRIPTS. 

    Мне нужно создать в нем каталог с именем вида: ddmmyyyy_newest - ddmmyyyy_current, где ddmmyyyy_newest - дата создания самого "нового" файла в каталоге C:\SCRIPTS, а ddmmyyyy_current - текущая дата. Все в формате ddmmyyyy.

    Потом я кладу в эту папку какие-то файлы, и мне нужно заархивировать ее в ZIP. Имя архива = имя папки.

    Подскажите пожалуйста реализацию.

    Спасибо!

    29 ноября 2012 г. 9:02

Ответы

  • Конечно, вот создание папки:

    $CurrentDate = Get-Date
    gci C:\LOG | sort LastWriteTime | select -last 1 | ForEach {$LastFileDate = $_.LastWriteTime}
    #Приведем день и месяц к виду 01-09, а не просто 1-9
    if ($LastFileDate.Day -lt 10) {
    $oldday = "0" + $LastFileDate.Day
    }
    else {
    $oldday = $LastFileDate.Day
    }
    
    if ($LastFileDate.Month -lt 10) {
    $oldmonth = "0" + $LastFileDate.Month
    }
    else {
    $oldmonth = $LastFileDate.Month
    }
    
    if ($CurrentDate.Day -lt 10) {
    $newday = "0" + $CurrentDate.Day
    }
    else {
    $newday = $CurrentDate.Day
    }
    
    if ($CurrentDate.Month -lt 10) {
    $newmonth = "0" + $CurrentDate.Month
    }
    else {
    $newmonth = $CurrentDate.Month
    }
    
    $newfoldername = [string]$oldday +"."+ [string]$oldmonth +"."+ [string]$LastFileDate.Year + " - " + [string]$newday +"."+ [string]$newmonth +"."+ [string]$CurrentDate.Year
    New-Item C:\LOG -Name $newfoldername -Type Directory


    Вот архивация, выполняется с помощью модуля PCSX:

    #Куда мы положим архив
    $destination = "C:\LOG\" + $newfoldername + "\"
    
    #Зададим имя архива
    $zipfilename = $newfoldername + ".zip"
    
    #Перейдем в каталог, содержимое которого нужно сохранить
    cd C:\LOG\$newfoldername
    
    #Создадим архив
    Write-Zip * ($destination + $zipfilename)
    
    #Удалим ненужные файлы
    Remove-Item C:\LOG\$newfoldername\* -recurse -exclude *.zip

    Также добавляю к скрипту, чтобы проверить наличие модуля:

    $pcsx = Get-ChildItem C:\Windows\System32\WindowsPowerShell\v1.0\Modules\Pscx
    if ($pcsx) {
    SCRIPT...
    }
    else {
    Write-Host -Fore Yellow "Please install PSCX Module on this PC"
    }

    • Помечено в качестве ответа KazunEditor 3 декабря 2012 г. 11:22
    3 декабря 2012 г. 11:01

Все ответы

  • Сделал сам :)
    • Помечено в качестве ответа Philip Portnoy 29 ноября 2012 г. 12:22
    • Снята пометка об ответе KazunEditor 3 декабря 2012 г. 11:22
    29 ноября 2012 г. 12:22
  • поделился бы скриптом, может кому понадобиться. ;)
    3 декабря 2012 г. 5:41
  • Конечно, вот создание папки:

    $CurrentDate = Get-Date
    gci C:\LOG | sort LastWriteTime | select -last 1 | ForEach {$LastFileDate = $_.LastWriteTime}
    #Приведем день и месяц к виду 01-09, а не просто 1-9
    if ($LastFileDate.Day -lt 10) {
    $oldday = "0" + $LastFileDate.Day
    }
    else {
    $oldday = $LastFileDate.Day
    }
    
    if ($LastFileDate.Month -lt 10) {
    $oldmonth = "0" + $LastFileDate.Month
    }
    else {
    $oldmonth = $LastFileDate.Month
    }
    
    if ($CurrentDate.Day -lt 10) {
    $newday = "0" + $CurrentDate.Day
    }
    else {
    $newday = $CurrentDate.Day
    }
    
    if ($CurrentDate.Month -lt 10) {
    $newmonth = "0" + $CurrentDate.Month
    }
    else {
    $newmonth = $CurrentDate.Month
    }
    
    $newfoldername = [string]$oldday +"."+ [string]$oldmonth +"."+ [string]$LastFileDate.Year + " - " + [string]$newday +"."+ [string]$newmonth +"."+ [string]$CurrentDate.Year
    New-Item C:\LOG -Name $newfoldername -Type Directory


    Вот архивация, выполняется с помощью модуля PCSX:

    #Куда мы положим архив
    $destination = "C:\LOG\" + $newfoldername + "\"
    
    #Зададим имя архива
    $zipfilename = $newfoldername + ".zip"
    
    #Перейдем в каталог, содержимое которого нужно сохранить
    cd C:\LOG\$newfoldername
    
    #Создадим архив
    Write-Zip * ($destination + $zipfilename)
    
    #Удалим ненужные файлы
    Remove-Item C:\LOG\$newfoldername\* -recurse -exclude *.zip

    Также добавляю к скрипту, чтобы проверить наличие модуля:

    $pcsx = Get-ChildItem C:\Windows\System32\WindowsPowerShell\v1.0\Modules\Pscx
    if ($pcsx) {
    SCRIPT...
    }
    else {
    Write-Host -Fore Yellow "Please install PSCX Module on this PC"
    }

    • Помечено в качестве ответа KazunEditor 3 декабря 2012 г. 11:22
    3 декабря 2012 г. 11:01
  • $path = "C:\Log"
    gci $path | Where {!$_.PsISContainer} | sort LastWriteTime | select -last 1 | ForEach {
    	$folder = "{0:dd.MM.yyyy} - {0:dd.MM.yyyy}" -f $_.LastWriteTime,(Get-Date)
    	$destination  = md $folder
    	$zipfilename = $destination.FullName + "\" + $destination.Name+ ".zip"
    	Write-Zip -level 9 -IncludeEmptyDirectories -Path $destination.FullName -OutputPath $zipfilename
    }

    3 декабря 2012 г. 11:20
    Отвечающий
  • Для тех кто как я сюда поиском попал, вариант создания папки просто с текущей датой. 
    New-Item -ItemType Directory -Path "C:\DHCPBackups\$((Get-Date).ToString('yyyy-MM-dd'))"


    Если фортуна повернулась к вам задом, не расстраивайтесь - пристраивайтесь...

    26 марта 2020 г. 15:47