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?
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:
È 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)"}
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;
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 tt
non è utile. L'utilizzo HH
ti darà il tempo di 24 ore. Consiglierei uno hhmmsstt
o l'altro oHHmmss
hh
in HH
sopra. Penso che sia ciò che la maggior parte delle persone vorrà.
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
Uso:
$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"
dal momento che corrisponde al formato OP
get-date -f yyyy-MM-dd
mi 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 :-)