TimeStamp บนชื่อไฟล์โดยใช้ PowerShell


96

ฉันมีเส้นทางในสตริง

"C:\temp\mybackup.zip"

ฉันต้องการแทรกการประทับเวลาในสคริปต์นั้นเช่น

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

มีวิธีง่ายๆในการทำเช่นนี้ใน PowerShell หรือไม่?

คำตอบ:


201

คุณสามารถแทรกโค้ดสคริปต์ 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)"}

6
อ๊าก. get-date -f yyyy-MM-ddทำให้ผมหยุดอยู่ครู่หนึ่งก่อนที่จะทราบว่ามันเป็นไม่ได้-f ผู้ประกอบการแต่แบบสั้นสำหรับพารามิเตอร์-Format มันดูค่อนข้างแปลก ๆ :-)
โจอี้

ขอบคุณ Keith ที่ให้ความช่วยเหลือเป็นอย่างดี
Chris Jones

1
และถ้าฉันต้องการเวลาด้วย?
John Demetriou


17

นี่คือรหัส 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;

ขอบคุณทอมนั่นเป็นความช่วยเหลือที่ดีเช่นกัน
Chris Jones

13

ฉันต้องการส่งออกบันทึกการรักษาความปลอดภัยของเราและต้องการวันที่และเวลาในเวลาสากลเชิงพิกัด สิ่งนี้พิสูจน์แล้วว่าเป็นความท้าทายในการค้นหา แต่ง่ายมากที่จะดำเนินการ:

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
Josh Brown

@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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.