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?

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)"}

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;

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

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

2

Menggunakan:

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

mungkin $filenameFormat = "mybackup $(Get-Date -Format "yyyy-MM-dd").zip" karena itu cocok dengan format OP
Mark Schultheiss
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.