TimeStamp pada nama file menggunakan PowerShell

96

Saya memiliki jalur dalam string,

"C:\temp\mybackup.zip"

Saya ingin memasukkan stempel waktu di skrip itu, misalnya,

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

Apakah ada cara mudah untuk melakukan ini di PowerShell?

Chris Jones
sumber

Jawaban:

201

Anda dapat menyisipkan kode skrip PowerShell arbitrer dalam string kutip ganda menggunakan subekspresi, misalnya, $ () seperti:

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

Dan jika Anda mendapatkan jalur dari tempat lain - sudah sebagai string:

$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"

Dan jika jalur tersebut kebetulan berasal dari output Get-ChildItem :

Get-ChildItem *.zip | Foreach {
  "$($_.DirectoryName)\$($_.BaseName) $(get-date -f yyyy-MM-dd)$($_.extension)"}
Keith Hill
sumber
6
Argh. get-date -f yyyy-MM-ddmembuat saya berhenti sejenak sebelum menyadari bahwa itu bukan yang -f Operator namun bentuk pendek untuk -Format parameter . Itu tampak agak keluar dari tempatnya, entah bagaimana :-)
Joey
Terima kasih Keith, itu sangat membantu
Chris Jones
1
dan jika saya ingin waktu juga?
John Demetriou
17

Berikut beberapa kode PowerShell yang seharusnya berfungsi. Anda dapat menggabungkan sebagian besar ini menjadi lebih sedikit baris, tetapi saya ingin membuatnya tetap jelas dan mudah dibaca.

[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;
Tom Hazel
sumber
Terima kasih Tom, Itu juga sangat membantu
Chris Jones
13

Saya perlu mengekspor log keamanan kami dan menginginkan tanggal dan waktu dalam Waktu Universal Terkoordinasi. Ini terbukti menjadi tantangan untuk dipikirkan, tetapi sangat sederhana untuk dieksekusi:

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

Kode ajaib hanyalah bagian ini:

$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ"))
Ryker Abel
sumber
hhadalah waktu 12 jam, tanpanya tttidak akan berguna. Menggunakan HHakan memberi Anda waktu 24 jam. Saya akan merekomendasikan salah satu hhmmssttatauHHmmss
Josh Brown
@JoshBrown saya berubah hhke HHatas. Saya pikir itulah yang diinginkan kebanyakan orang.
mwfearnley
4

Terima kasih untuk skrip di atas. Sedikit modifikasi untuk menambahkan file yang diakhiri dengan benar. Coba ini ...

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

Rename-Item -Path "C:\temp\MyFileName.txt" -NewName $filenameFormat
Robert Blackwell
sumber
2

Menggunakan:

$filenameFormat = "mybackup.zip" + " " + (Get-Date -Format "yyyy-MM-dd")
Rename-Item -Path "C:\temp\mybackup.zip" -NewName $filenameFormat
Akankah Webb
sumber
mungkin $filenameFormat = "mybackup $(Get-Date -Format "yyyy-MM-dd").zip" karena itu cocok dengan format OP
Mark Schultheiss