TimeStamp sur le nom de fichier à l'aide de PowerShell


95

J'ai un chemin dans une chaîne,

"C:\temp\mybackup.zip"

Je voudrais insérer un horodatage dans ce script, par exemple,

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

Existe-t-il un moyen simple de le faire dans PowerShell?

Réponses:


196

Vous pouvez insérer du code de script PowerShell arbitraire dans une chaîne entre guillemets en utilisant une sous-expression, par exemple, $ () comme ceci:

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

Et si vous obtenez le chemin ailleurs - déjà sous forme de chaîne:

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

Et si le chemin provient de la sortie de Get-ChildItem :

Get-ChildItem *.zip | Foreach {
  "$($_.DirectoryName)\$($_.BaseName) $(get-date -f yyyy-MM-dd)$($_.extension)"}

5
Argh. get-date -f yyyy-MM-ddm'a fait m'arrêter un instant avant de réaliser que ce n'est pas l' -f opérateur mais la forme abrégée du -Format paramètre . Cela avait l'air plutôt hors de propos, d'une manière ou d'une autre :-)
Joey

Merci Keith qui a été d'une grande aide
Chris Jones

1
et si je veux aussi le temps?
John Demetriou


16

Voici un code PowerShell qui devrait fonctionner. Vous pouvez combiner la plupart de cela en moins de lignes, mais je voulais que ce soit clair et lisible.

[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;

Merci Tom, c'était aussi une grande aide
Chris Jones

12

J'avais besoin d'exporter notre journal de sécurité et je voulais la date et l'heure en temps universel coordonné. Cela s'est avéré être un défi à comprendre, mais si simple à exécuter:

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

Le code magique est juste cette partie:

$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ"))

hhest de 12 heures, sans ttce n'est pas utile. L'utilisation HHvous donnera 24 heures. Je recommanderais l'un hhmmssttou l' autre ouHHmmss
Josh Brown

@JoshBrown J'ai changé hhpour HHci-dessus. Je pense que c'est ce que la plupart des gens voudront.
mwfearnley le

4

Merci pour le script ci-dessus. Une petite modification à ajouter dans le fichier se terminant correctement. Essaye ça ...

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

Rename-Item -Path "C:\temp\MyFileName.txt" -NewName $filenameFormat

2

Utilisation:

$filenameFormat = "mybackup.zip" + " " + (Get-Date -Format "yyyy-MM-dd")
Rename-Item -Path "C:\temp\mybackup.zip" -NewName $filenameFormat

peut-être $filenameFormat = "mybackup $(Get-Date -Format "yyyy-MM-dd").zip" puisque cela correspond au format OP
Mark Schultheiss
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.