Przenoszenie folderów o tej samej nazwie do innego folderu

Nov 28 2020

Mam foldery raportów, które mają unikalne nazwy folderów nadrzędnych, takie jak:

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

Zrobiłem skrypt, który zmienia nazwę folderu „Report”, tak aby zawierał nazwę jego folderu nadrzędnego i przenosił ten folder w inne miejsce (np. Report -> LTFT01Report). Jednak teraz napotykam problem, w wyniku którego raz to zrobisz, drugi raport (utworzony w oryginalnym folderze) ma taką samą nazwę jak ten, który przeniosłem wcześniej i odmawia przeniesienia. Oto kod poniżej:

#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

Tak więc po trzecim uruchomieniu raportu drugi raport (z drugiego uruchomienia) nie zostanie przeniesiony, ponieważ LTFT01Report (przykład) już istnieje w $ MasterReportPath.

Myślę, że muszę dołączyć lub poprzedzić liczbę w oparciu o to, co już istnieje, i na tej podstawie zwiększyć. Na przykład, jeśli LTFT01Report już istnieje w $ MasterReportPath, wówczas 2. uruchomienie tego samego raportu powinno zmienić nazwę z LTFT01Report na LTFT01Report2 lub coś do rozróżnienia.

Jednak nie wiem, jakie polecenia cmdlet programu PowerShell mogłyby mi w tym pomóc, ale będę badał. Gdyby ktoś w międzyczasie mógł popchnąć mnie we właściwym kierunku, byłoby to naprawdę pomocne!

Odpowiedzi

Adil.yuken Nov 30 2020 at 11:37

Cóż, na szczęście utworzyłem odpowiedź:

#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

Dwie rzeczy, które zrobiłem:

  1. Dołącz datę utworzenia folderu na końcu nazwy pliku PO dodaniu nazwy nadrzędnej. Na przykład Report -> LTFT01Report20201130-112918. Pomaga to tworzyć unikalne nazwy folderów raportów dla dowolnego testu, nawet te same testy uruchamiane wiele razy.
  2. Upewniono się, że lokalizacja folderu MasterReports nie mieści się w pierwszym symbolu wieloznacznym, ponieważ zmieniała również zawarte w nim nazwy raportów podrzędnych. Właśnie przekazałem wszystkie foldery na tym samym poziomie co MasterReports przez innego rodzica. Na przykład:

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