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 ttnon è utile. L'utilizzo HHti darà il tempo di 24 ore. Consiglierei uno hhmmsstto l'altro oHHmmss
hhin HHsopra. 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-ddmi ha fatto fermare un attimo prima di rendermi conto che non è l'-foperatore ma la forma abbreviata per il-Formatparametro . Sembrava piuttosto fuori luogo, in qualche modo :-)