TimeStamp en el nombre de archivo usando PowerShell

95

Tengo un camino en una cuerda,

"C:\temp\mybackup.zip"

Me gustaría insertar una marca de tiempo en ese script, por ejemplo,

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

¿Existe una forma sencilla de hacer esto en PowerShell?

Chris Jones
fuente

Respuestas:

196

Puede insertar código de script de PowerShell arbitrario en una cadena entre comillas dobles utilizando una subexpresión, por ejemplo, $ () así:

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

Y si obtiene la ruta de otro lugar, ya como una cadena:

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

Y si la ruta proviene de la salida de Get-ChildItem :

Get-ChildItem *.zip | Foreach {
  "$($_.DirectoryName)\$($_.BaseName) $(get-date -f yyyy-MM-dd)$($_.extension)"}
Keith Hill
fuente
5
Argh. get-date -f yyyy-MM-ddme hizo parar por un momento antes de darse cuenta de que es no el -f operador pero la forma corta para el -Format parámetro . Parecía bastante fuera de lugar, de alguna manera :-)
Joey
Gracias Keith que fue de gran ayuda
Chris Jones
1
y si quiero el tiempo tambien
John Demetriou
16

Aquí hay un código de PowerShell que debería funcionar. Puede combinar la mayor parte de esto en menos líneas, pero quería mantenerlo claro y legible.

[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
fuente
Gracias Tom, eso también fue de gran ayuda
Chris Jones
12

Necesitaba exportar nuestro registro de seguridad y quería la fecha y la hora en hora universal coordinada. Esto resultó ser un desafío de resolver, pero muy simple de ejecutar:

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

El código mágico es solo esta parte:

$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ"))
Ryker Abel
fuente
hhes un tiempo de 12 horas, sin ttél no es útil. El uso HHle dará un tiempo de 24 horas. Recomendaría una hhmmsstto la otraHHmmss
Josh Brown
@JoshBrown Cambié hha HHarriba. Creo que eso es lo que querrá la mayoría de la gente.
mwfearnley
4

Gracias por el guión anterior. Una pequeña modificación para agregar en el archivo que termine correctamente. Prueba esto ...

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

Rename-Item -Path "C:\temp\MyFileName.txt" -NewName $filenameFormat
Robert Blackwell
fuente
2

Utilizar:

$filenameFormat = "mybackup.zip" + " " + (Get-Date -Format "yyyy-MM-dd")
Rename-Item -Path "C:\temp\mybackup.zip" -NewName $filenameFormat
Will Webb
fuente
tal vez $filenameFormat = "mybackup $(Get-Date -Format "yyyy-MM-dd").zip" porque coincide con el formato OP
Mark Schultheiss