TimeStamp sul nome del file utilizzando PowerShell


94

Ho un percorso in una stringa,

"C:\temp\mybackup.zip"

Vorrei inserire un timestamp in quello script, ad esempio,

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

C'è un modo semplice per farlo in PowerShell?

Risposte:


195

È possibile inserire codice script di PowerShell arbitrario in una stringa tra virgolette utilizzando una sottoespressione, ad esempio $ () in questo modo:

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

E se stai ottenendo il percorso da qualche altra parte, già come una stringa:

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

E se il percorso proviene dall'output di Get-ChildItem :

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

5
Argh. get-date -f yyyy-MM-ddmi ha fatto fermare un attimo prima di rendermi conto che non è l' -f operatore ma la forma abbreviata per il -Format parametro . Sembrava piuttosto fuori luogo, in qualche modo :-)
Joey

Grazie Keith che è stato di grande aiuto
Chris Jones il

1
e se voglio anche l'ora?
John Demetriou


16

Ecco un po 'di codice PowerShell che dovrebbe funzionare. Puoi combinare la maggior parte di questo in meno righe, ma volevo che fosse chiaro e leggibile.

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

Grazie Tom, anche quello è stato di grande aiuto
Chris Jones il

12

Avevo bisogno di esportare il nostro registro di sicurezza e volevo la data e l'ora in Coordinated Universal Time. Questa si è rivelata una sfida da capire, ma così semplice da eseguire:

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

Il codice magico è solo questa parte:

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

hhè di 12 ore, senza ttnon è utile. L'utilizzo HHti darà il tempo di 24 ore. Consiglierei uno hhmmsstto l'altro oHHmmss
Josh Brown

@ JoshBrown ho cambiato hhin HHsopra. Penso che sia ciò che la maggior parte delle persone vorrà.
mwfearnley

4

Grazie per lo script sopra. Una piccola modifica da aggiungere al file che termina correttamente. Prova questo ...

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

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

2

Uso:

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

forse $filenameFormat = "mybackup $(Get-Date -Format "yyyy-MM-dd").zip" dal momento che corrisponde al formato OP
Mark Schultheiss
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.