我在具有以下结构的不同父文件夹下有许多报告文件夹:
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\*"
编辑:似乎我需要澄清以下几点:
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
绝对不是优雅,但可以做到。由于我有此问题的主要答案,因此将其标记为已回答。但是,这有一个问题,即如果多次运行该文件夹,则相同的命名文件夹将不会移动(因为它不会附加唯一的数字或字符)。我在这里的一个新问题中强调了这一点,如果你有兴趣的话。如果你需要的只是一次性工作脚本,那么上面的脚本对我有用。
我现在也回答了我的第二个问题,但是为了不使这个问题过于混乱,请参阅我的答案下面的链接。谢谢!