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?

Chris Jones
quelle

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)"}
Keith Hill
quelle
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;
Tom Hazel
quelle
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"))
Ryker Abel
quelle
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
Robert Blackwell
quelle
2

Verwenden:

$filenameFormat = "mybackup.zip" + " " + (Get-Date -Format "yyyy-MM-dd")
Rename-Item -Path "C:\temp\mybackup.zip" -NewName $filenameFormat
Will Webb
quelle
vielleicht $filenameFormat = "mybackup $(Get-Date -Format "yyyy-MM-dd").zip" da das dem OP-Format entspricht
Mark Schultheiss