Déplacement de dossiers de même nom dans un autre dossier

Nov 28 2020

J'ai des dossiers de rapports qui ont des noms de dossier parent uniques en tant que tels:

C:\User\USER\Downloads\LTFT01\Report
C:\User\USER\Downloads\LTFT02\Report

J'ai fait un script qui change le nom du dossier «Report» pour inclure le nom de son dossier parent et déplacer ce dossier ailleurs (par exemple Report -> LTFT01Report). Cependant, je rencontre maintenant un problème selon lequel une fois que cela est fait une fois, le deuxième rapport (créé dans le dossier d'origine) porte le même nom que celui que j'ai déplacé précédemment et refuse de se déplacer. Voici le code ci-dessous:

#Get report folder path
$ReportPath = "C:\Users\USER\Downloads\*\Report" $MasterReportPath = "C:\Users\USER\Downloads\MasterReports"

#Rename report folder to {currentparentname}report
Get-Item -Path $ReportPath | ForEach-Object {$a = $_.FullName | split-path -Parent | split-path -leaf; Rename-Item -Path $_.FullName -NewName $a"Report"} #Move report folder $AnyNamedReportFolder = Get-Item "C:\Users\USER\Downloads\*\*Report*" -Exclude *.jmx, *.csv
Move-Item -Path $AnyNamedReportFolder -Destination $MasterReportPath

Ainsi, après la troisième exécution d'un rapport, le deuxième rapport (à partir de la deuxième exécution) ne parviendra pas à se déplacer puisque LTFT01Report (exemple) existe déjà dans $ MasterReportPath.

Je pense que je dois ajouter ou ajouter un nombre en fonction de ce qui existe déjà et incrémenter en fonction de cela. Exemple si LTFT01Report existe déjà dans $ MasterReportPath, la deuxième exécution du même rapport doit être renommée de LTFT01Report en LTFT01Report2 ou quelque chose à différencier.

Cependant, je ne suis pas familier avec les applets de commande PowerShell qui pourraient m'aider à le faire, mais je ferai des recherches. Si quelqu'un entre-temps pouvait me pousser dans la bonne direction, ce serait vraiment utile!

Réponses

Adil.yuken Nov 30 2020 at 11:37

Eh bien, j'ai fini par créer la réponse heureusement:

#Get report folder path
$ReportPath = "C:\Users\USER\Downloads\TestPlans\*\Report" $ReportInNamePath = "C:\Users\USER\Downloads\TestPlans\*\*Report*"
$MasterReportPath = "C:\Users\USER\Downloads\MasterReports" #Rename report folder Get-Item -Path $ReportPath | ForEach-Object {$a = $_.FullName | split-path -Parent | split-path -leaf; Rename-Item -Path $_.FullName -NewName $a"Report"}

#Append Date and Time
Get-Item -Path $ReportInNamePath | ForEach-Object {$a = $_.FullName | split-path -leaf; Rename-Item -Path $_.FullName -NewName ($a + $_.CreationTime.ToString("yyyMMdd-HHmmss"))}

#Move report folder
$AnyNamedReportFolder = Get-Item $ReportInNamePath -Exclude *.jmx, *.csv
Move-Item -Path $AnyNamedReportFolder -Destination $MasterReportPath

Les deux choses que j'ai faites:

  1. Ajoutez la date de création du dossier à la fin du nom de fichier APRÈS avoir ajouté le nom du parent. Par exemple, Report -> LTFT01Report20201130-112918. Cela permet de créer des noms de dossier de rapport uniques pour tout test, même les mêmes tests exécutés plusieurs fois.
  2. Garanti que l'emplacement du dossier MasterReports ne tombait pas sous le premier caractère générique, car il modifiait également les noms de rapport enfant qu'il contient. J'ai juste sous-tendu tous les dossiers au même niveau que MasterReports par un autre parent. Donc par exemple:

C:\Users\USER\Downloads\LTFT01 -> C:\Users\USER\Downloads\TestPlans\LTFT01