我嘗試將擴展名為 .wav 的所有檔案從某個根檔案夾內的 400 個不同檔案夾中移動到名為“Stems”的子檔案夾中。這意味著根檔案夾內的這 400 個檔案夾中的每一個都有一個名為“Stems”的子檔案夾。
$Dir = 'F:\PRODUCTION\Complete Projects\*'
Get-ChildItem -Path $Dir -File -Filter '*.wav' |
ForEach-Object {
$Dest = "$($_.DirectoryName)\*\Stems"
If (!(Test-Path -LiteralPath $Dest))
{New-Item -Path $Dest -ItemType 'Directory' -Force}
Move-Item -Path $_.FullName -Destination $Dest
}
當我為變數選擇$dir指定的專案檔案夾并*從$dest$變數中洗掉時,如下所示,它確實將 .wav 檔案正確移動到“Stems”子檔案夾。
$Dir = 'F:\PRODUCTION\Complete Projects\Project 392 - Woodland\'
Get-ChildItem -Path $Dir -File -Filter '*.wav' |
ForEach-Object {
$Dest = "$($_.DirectoryName)\*\Stems"
If (!(Test-Path -LiteralPath $Dest))
{New-Item -Path $Dest -ItemType 'Directory' -Force}
Move-Item -Path $_.FullName -Destination $Dest
}
但是,我希望能夠為不同的檔案夾名稱一次執行此操作,而不是每個指定檔案夾執行 400 次。
有什么建議么?
uj5u.com熱心網友回復:
如果我理解正確,您可以添加一個-Recurse開關以Get-ChildItem獲取所有.wav檔案,然后按其父檔案夾路徑對它們進行分組,然后對每組物件進行迭代并將它們移動到各自的子檔案夾。
IO.FileInfo輸出的每個實體Get-ChildItem都有一個代表檔案父目錄的屬性,.Directory屬性值是一個IO.DirectoryInfo實體。
# get all wav files recursive
Get-ChildItem -Path $Dir -File -Filter '*.wav' -Recurse |
# group them by their parent folder absolute path
Group-Object { $_.Directory.FullName } | ForEach-Object {
# for each group, create a destination folder
$dest = New-Item (Join-Path $_.Name -ChildPath 'Stems') -ItemType Directory -Force
# and move them
$_.Group | Move-Item -Destination $dest -WhatIf
}
-WhatIf一旦您認為腳本正在執行您想要的操作,您就可以洗掉該開關。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/481958.html
標籤:电源外壳
