Відмітка часу на ім'я файлу за допомогою PowerShell


95

У мене є шлях у рядку,

"C:\temp\mybackup.zip"

Я хотів би вставити мітку часу в цей сценарій, наприклад,

"C:\temp\mybackup 2009-12-23.zip"

Чи є простий спосіб зробити це в PowerShell?

Відповіді:


196

Ви можете вставити довільний код сценарію PowerShell у рядок із подвійними лапками, використовуючи підвираз, наприклад, $ () приблизно так:

"C:\temp\mybackup $(get-date -f yyyy-MM-dd).zip"

І якщо ви отримуєте шлях звідкись ще - вже як рядок:

$dirName  = [io.path]::GetDirectoryName($path)
$filename = [io.path]::GetFileNameWithoutExtension($path)
$ext      = [io.path]::GetExtension($path)
$newPath  = "$dirName\$filename $(get-date -f yyyy-MM-dd)$ext"

І якщо шлях трапляється з виводу Get-ChildItem :

Get-ChildItem *.zip | Foreach {
  "$($_.DirectoryName)\$($_.BaseName) $(get-date -f yyyy-MM-dd)$($_.extension)"}

5
Арг. get-date -f yyyy-MM-ddзмусив мене зупинитися на мить , перш ніж зрозумів , що це НЕ -f оператор , а скорочена форма для -Format параметра . Це якось виглядало недоречно :-)
Джої

Дякую Кіту, це дуже допомогло
Кріс Джонс

1
а якщо я теж хочу час?
Джон Деметріу,


16

Ось код PowerShell, який повинен працювати. Ви можете поєднати більшу частину цього у меншу кількість рядків, але я хотів, щоб це було чітким та читабельним.

[string]$filePath = "C:\tempFile.zip";

[string]$directory = [System.IO.Path]::GetDirectoryName($filePath);
[string]$strippedFileName = [System.IO.Path]::GetFileNameWithoutExtension($filePath);
[string]$extension = [System.IO.Path]::GetExtension($filePath);
[string]$newFileName = $strippedFileName + [DateTime]::Now.ToString("yyyyMMdd-HHmmss") + $extension;
[string]$newFilePath = [System.IO.Path]::Combine($directory, $newFileName);

Move-Item -LiteralPath $filePath -Destination $newFilePath;

Дякую Томе, це теж було великою допомогою
Кріс Джонс

12

Мені потрібно було експортувати наш журнал безпеки, і я бажав дати та часу за універсальним координованим часом. Це виявилося складним завданням, але настільки простим у виконанні:

wevtutil export-log security c:\users\%username%\SECURITYEVENTLOG-%computername%-$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ")).evtx

Чарівний код - це лише ця частина:

$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ"))

hhстановить 12-годинний час, без ttцього не корисно. Використання HHдасть вам 24-годинний час. Я б порекомендував hhmmssttабоHHmmss
Джош Браун,

@JoshBrown я змінив hhна HHвище. Я думаю, що цього захоче більшість людей.
mwfearnley

4

Дякуємо за наведений сценарій. Одну невеличку модифікацію, яку слід додати у файл, який закінчується правильно. Спробуйте це ...

$filenameFormat = "MyFileName" + " " + (Get-Date -Format "yyyy-MM-dd") **+ ".txt"**

Rename-Item -Path "C:\temp\MyFileName.txt" -NewName $filenameFormat

2

Використання:

$filenameFormat = "mybackup.zip" + " " + (Get-Date -Format "yyyy-MM-dd")
Rename-Item -Path "C:\temp\mybackup.zip" -NewName $filenameFormat

можливо, $filenameFormat = "mybackup $(Get-Date -Format "yyyy-MM-dd").zip" оскільки це відповідає формату OP
Mark Schultheiss
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.