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.