Zeitstempel für Dateinamen mit PowerShell


94

Ich habe einen Pfad in einer Zeichenfolge,

"C:\temp\mybackup.zip"

Ich möchte einen Zeitstempel in dieses Skript einfügen, zum Beispiel

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

Gibt es eine einfache Möglichkeit, dies in PowerShell zu tun?

Antworten:


195

Sie können beliebigen PowerShell-Skriptcode in eine Zeichenfolge in doppelten Anführungszeichen einfügen, indem Sie einen Unterausdruck verwenden, z. B. $ () wie folgt:

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

Und wenn Sie den Pfad von einem anderen Ort erhalten - bereits als Zeichenfolge:

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

Und wenn der Pfad zufällig von der Ausgabe von Get-ChildItem stammt :

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

5
Argh. get-date -f yyyy-MM-ddIch musste einen Moment innehalten, bevor mir klar wurde, dass es nicht der -f Operator, sondern die Kurzform für den -Format Parameter ist . Es sah irgendwie ziemlich fehl am Platz aus :-)
— Joey

Danke Keith, das war eine große Hilfe
— Chris Jones

1
und wenn ich auch die zeit will?
— John Demetriou


16

Hier ist ein PowerShell-Code, der funktionieren sollte. Sie können das meiste davon in weniger Zeilen kombinieren, aber ich wollte es klar und lesbar halten.

[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;

Danke Tom, das war auch eine große Hilfe
— Chris Jones

12

Ich musste unser Sicherheitsprotokoll exportieren und wollte Datum und Uhrzeit in koordinierter Weltzeit. Dies erwies sich als eine Herausforderung, aber so einfach auszuführen:

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

Der magische Code ist genau dieser Teil:

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

hhist 12 Stunden Zeit, ohne ttes ist nicht sinnvoll. Wenn HHSie verwenden, haben Sie 24 Stunden Zeit. Ich würde entweder empfehlen hhmmssttoderHHmmss
— Josh Brown

@ JoshBrown Ich habe hhzu HHoben geändert . Ich denke, das werden die meisten Leute wollen.
— mwfearnley

4

Danke für das obige Skript. Eine kleine Änderung, um die Datei korrekt hinzuzufügen. Versuche dies ...

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

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

2

Verwenden:

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

vielleicht $filenameFormat = "mybackup $(Get-Date -Format "yyyy-MM-dd").zip" da das dem OP-Format entspricht
— Mark Schultheiss
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.