TimeStamp no nome do arquivo usando PowerShell

94

Eu tenho um caminho em uma string,

"C:\temp\mybackup.zip"

Eu gostaria de inserir um carimbo de data / hora nesse script, por exemplo,

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

Existe uma maneira fácil de fazer isso no PowerShell?

Chris Jones
fonte

Respostas:

195

Você pode inserir o código de script arbitrário do PowerShell em uma string entre aspas usando uma subexpressão, por exemplo, $ () assim:

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

E se você está obtendo o caminho de outro lugar - já como uma string:

$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 o caminho vier da saída de Get-ChildItem :

Get-ChildItem *.zip | Foreach {
  "$($_.DirectoryName)\$($_.BaseName) $(get-date -f yyyy-MM-dd)$($_.extension)"}
Keith Hill
fonte
5
Argh. get-date -f yyyy-MM-ddme fez parar por um momento antes de perceber que ele é não o -f operador , mas a forma abreviada para o -Format parâmetro . Parecia um pouco fora do lugar, de alguma forma :-)
Joey
Obrigado Keith, essa foi uma grande ajuda
Chris Jones
1
e se eu quiser o tempo também?
John Demetriou,
1
@JohnDemetriou, consulte msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx
Keith Hill
16

Aqui estão alguns códigos do PowerShell que devem funcionar. Você pode combinar a maior parte disso em menos linhas, mas eu queria mantê-lo claro e legível.

[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
fonte
Obrigado Tom, Isso também foi uma grande ajuda
Chris Jones
12

Eu precisava exportar nosso log de segurança e queria a data e hora no Tempo Universal Coordenado. Isso provou ser um desafio de descobrir, mas tão simples de executar:

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

O código mágico é apenas esta parte:

$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ"))
Ryker Abel
fonte
hhé o tempo de 12 horas, sem ttele não é útil. O uso HHlhe dará um tempo de 24 horas. Eu recomendaria hhmmssttouHHmmss
Josh Brown
@JoshBrown mudei hhpara HHacima. Acho que é isso que a maioria das pessoas deseja.
mwfearnley,
4

Obrigado pelo script acima. Uma pequena modificação para adicionar no final do arquivo corretamente. Experimente isso ...

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

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

Usar:

$filenameFormat = "mybackup.zip" + " " + (Get-Date -Format "yyyy-MM-dd")
Rename-Item -Path "C:\temp\mybackup.zip" -NewName $filenameFormat
Will Webb
fonte
talvez $filenameFormat = "mybackup $(Get-Date -Format "yyyy-MM-dd").zip" já que corresponda ao formato OP
Mark Schultheiss