Как выполнить команду в каждом подкаталоге папки? - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть папка с большим количеством папок в папке.

Я ищу, чтобы все файлы на определенном "уровне" были перемещены на один уровень вверх.

Например, у меня есть:

  • ParentFolder \ Actor1 \ Movie \ HighRes \ HighresMovie.mp4
  • ParentFolder \ Actor1 \ Movie \ LowresMovie.mp4
  • ParentFolder \ Actor2 \ Movie \ HighRes\ HighresMovie.mp4
  • ParentFolder \ Actor2 \ Movie \ LowresMovie.mp4

Но я хочу, чтобы он выглядел следующим образом:

  • ParentFolder \ Actor1 \ Movie \ HighresMovie.mp4
  • ParentFolder \ Actor1 \ Movie \ LowresMovie.mp4
  • ParentFolder \ Actor2 \ Movie \ HighresMovie.mp4
  • ParentFolder \ Actor2Movie \ LowresMovie.mp4

Это массивная папка, содержащая около 1000 папок «Актера».

В настоящее время эта команда командной строки частично работает:

for /f "delims==" %i in ('dir /a:d /b') do for /f "delims==" %f in ('dir "%i" /a:d /b') do (move "%i\%f\*.*" "%i"&&rd "%i\%f" /s /q)

Я могу запустить эту команду из командной строки в папке «Actor», и она делает именно то, что я хочу.Теперь я хочу иметь возможность запускать его из «ParentFolder», и он должен применять ту же команду к каждой папке «Actor», которую я имею.

1 Ответ

0 голосов
/ 24 декабря 2018

возвращает список файлов в дереве $TopDir, которые соответствуют *.mp4 И имеют HighRes в имени пути.затем он перебирает список, получает имя родительского каталога и перемещает файл в этот родительский каталог.

удалить -WhatIf, когда вы будете готовы сделать это по-настоящему ... [ ухмылка ]

$TopDir = "$env:TEMP\ParentFolder"
$Filter = '*.mp4'
$SourceDir = 'HighRes'

$MoveFileList = Get-ChildItem -LiteralPath $TopDir -Filter $Filter -Recurse -File |
    Where-Object {$_.DirectoryName -match $SourceDir}

foreach ($MFL_Item in $MoveFileList)
    {
    $DestDir = Split-Path -Path $MFL_Item.DirectoryName -Parent
    Move-Item -LiteralPath $MFL_Item.FullName -Destination $DestDir -WhatIf
    }

вывод [переформатирован, чтобы его было легче читать]...

What if: Performing the operation
    "Move File"
    on target
    "Item: C:\Temp\ParentFolder\Actor1\Movie\HighRes\HighresMovie.mp4
     Destination: C:\Temp\ParentFolder\Actor1\Movie\HighresMovie.mp4".
What if: Performing the operation
    "Move File"
    on target
    "Item: C:\Temp\ParentFolder\Actor2\Movie\HighRes\HighresMovie.mp4
     Destination: C:\Temp\ParentFolder\Actor2\Movie\HighresMovie.mp4".
...