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?
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?
Respuestas:
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)"}
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;
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"))
hh
es un tiempo de 12 horas, sin tt
él no es útil. El uso HH
le dará un tiempo de 24 horas. Recomendaría una hhmmsstt
o la otraHHmmss
hh
a HH
arriba. Creo que eso es lo que querrá la mayoría de la gente.
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
Utilizar:
$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"
porque coincide con el formato OP
get-date -f yyyy-MM-dd
me 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 :-)