Warm tip: This article is reproduced from serverfault.com, please click

其他-使用PowerShell将子文件夹移动到其他位置并基于父文件夹重命名

(其他 - Move subfolder elsewhere and rename based on parent using PowerShell)

发布于 2020-11-27 14:22:28

我在具有以下结构的不同父文件夹下有许多报告文件夹:

C:\Users\USER\Downloads\LTFT01\Report
C:\Users\USER\Downloads\LTFT02\Report
C:\Users\USER\Downloads\LTFT03\Report

我想做的是,如果任何报告文件夹都不为空,则将该报告文件夹移动到其他位置,并使用名称中的原始父文件夹重命名该文件夹。如LTFT01Report和LTFT02Report。

我已经准备好“测试它是否为非空”,但是我不知道从这里开始该怎么做。我真的不知道foreach的工作原理,所以我什至无法实现(即使在搜索之后!)

If (Test-Path -Path "C:\Users\USER\Downloads\*\Report\*"

编辑:似乎我需要澄清以下几点:

  1. 截至本周,我是编码新手,还是PowerShell新手
  2. 我已经在Google上搜索了很多,找到了很多答案,但是没有(直接)与我的问题相关的东西,或者让我感到困惑:(
  3. 我真的很希望在正确的方向上轻推,而不是git gud。
  4. 认为我需要一个foreach,因此是问题的最后一行,但不确定。再次-新手在这里!
Questioner
Adil.yuken
Viewed
11
Adil.yuken 2020-11-29 05:56:00

OP在这里!

因此,我已经能够基于一些研究来创建答案:

#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

绝对不是优雅,但可以做到。由于我有此问题的主要答案,因此将其标记为已回答。但是,这有一个问题,即如果多次运行该文件夹,则相同的命名文件夹将不会移动(因为它不会附加唯一的数字或字符)。我在这里的一个新问题中强调了这一点,如果你有兴趣的话。如果你需要的只是一次性工作脚本,那么上面的脚本对我有用。

将同名文件夹移动到另一个文件夹