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.