Как получить или изменить дату создания/модификации файла с помощью PowerShell

С помощью PowerShell можно получить значения или изменить атрибуты файлов и папок на файловой системе. В этой статье мы рассмотрим, как работать с временными метками файлов с помощью PowerShell.

Вывести дату создания, изменения и последнего доступа (открытия) файла:

Get-ChildItem -Path C:\PS\Check-KBInstalled.ps1 | select Name, Length, CreationTime, LastWriteTime, LastAccessTime

PowerShell - вывести дату создания, редактирования и последнего доступа к файлу

С помощью меток времени можно быстро найти все файлы созданные/измененные за определенный промежуток времени. Например, вывести все файлы в папке, созданные за последние 30 дней:

Get-ChildItem -Path c:\ps -Recurse| where -Property CreationTime -gt (Get-Date).AddDays(-30)

Можно изменить значение любой из временных меток файла. Например, изменить дату создания файла:

(Get-ChildItem -Path C:\PS\Check-KBInstalled.ps1).CreationTime=Get-Date('21.05.2010')

Изменить время последнего изменения файла на текущую дату:

(Get-ChildItem -Path C:\PS\Check-KBInstalled.ps1).LastWriteTime=Get-Date

Проверим, что временные метки файла были изменены (с помощью PowerShell и в свойствах файла в проводнике Windows):

изменить дату создания и модификации файла в windows из командной строки

Эти же команды используются, чтобы изменить дату создания/модификации папки:

(Get-Item -Path C:\PS\).CreationTime=Get-Date('21.05.2010 10:10')

Если нужно изменить дату модификации у всех файлов и вложенных папок, можно использовать такой однострочник:

dir c:\PS -recurse | %{$_.LastWriteTime = Get-Date('21.05.2023 10:10')}

Если нужно сделать так, чтобы даты модификации файлов немного отличались (в этом примере на 1 минуту):

dir c:\ps -file -recurse|%{$i=0} {$_.LastWriteTime = (Get-Date('21.05.2023 10:10')).AddMinutes($i); $i++}

изменить дату редактирования всех файлов в папке

Обратите внимание, что формат даты будет отличаться в зависимости от локали компьютера. Например, на компьютере с русской локалью при попытке задать дату в американском формате ( MM/DD/YYYY ) будет ошибка:

Get-Date : Cannot bind parameter 'Date'. Cannot convert value "12/31/2024" to type "System.DateTime". Error: "String was not recognized as a valid DateTime."

Для универсальности скрипта можно предварительно конвертировать дату в нужный формат с помощью метода ParseExact:

(Get-Item -Path "C:\PS").CreationTime = [datetime]::ParseExact("12/31/2024", "MM/dd/yyyy", $null)

Если формат даты в выражении указан неверно, появится ошибка:

The DateTime represented by the string is not supported in calendar System.Globalization.GregorianCalendar.

Предыдущая статья Следующая статья


Комментариев: 0 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)