Mover carpetas del mismo nombre a otra carpeta

Nov 28 2020

Tengo carpetas de informes que tienen nombres únicos de carpetas principales como tales:

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

He creado un script que cambia el nombre de la carpeta 'Informe' para incluir el nombre de su carpeta principal y mover esa carpeta a otro lugar (por ejemplo, Informe -> LTFT01Report). Sin embargo, ahora me encuentro con un problema por el cual una vez que esto se hace una vez, el segundo informe (realizado dentro de la carpeta original) tiene el mismo nombre que el que moví anteriormente y se niega a mover. Aquí está el código a continuación:

#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

Por lo tanto, después de la tercera ejecución de un informe, el segundo informe (de la segunda ejecución) no se moverá ya que LTFT01Report (ejemplo) ya existe en $ MasterReportPath.

Creo que necesito agregar o anteponer un número en función de lo que ya existe e incrementar en función de eso. Por ejemplo, si LTFT01Report ya existe en $ MasterReportPath, la segunda ejecución del mismo informe debe cambiar el nombre de LTFT01Report a LTFT01Report2 o algo para diferenciar.

Sin embargo, no estoy familiarizado con lo que los cmdlets de PowerShell me ayudarían a hacer eso, pero estaré investigando. Si alguien mientras tanto pudiera empujarme en la dirección correcta, ¡sería realmente útil!

Respuestas

Adil.yuken Nov 30 2020 at 11:37

Bueno, terminé creando la respuesta afortunadamente:

#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

Las dos cosas que hice:

  1. Agregue la fecha de creación de la carpeta al final del nombre del archivo DESPUÉS de agregar el nombre principal. Por ejemplo, Informe -> LTFT01Report20201130-112918. Esto ayuda a crear nombres de carpetas de informes únicos para cualquier prueba, incluso las mismas pruebas se ejecutan varias veces.
  2. Se aseguró de que la ubicación de la carpeta MasterReports no cayera bajo el primer comodín, ya que también estaba cambiando los nombres de los informes secundarios dentro de ella. Acabo de subdividir todas las carpetas en el mismo nivel que MasterReports de otro padre. Así por ejemplo:

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