Переместить файлы, содержащие X в именах, в папку X - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь переместить файлы, содержащие «Sxx» в именах, в папку с именем «Sxx».

, например:

file1: S01E12.srt ----> /S01/S01E12.srt

file2: S03E14.jpg ----> /S03/S03E14.jpg

и т. Д.

Итак, я пришелиспользуйте эти коды для создания папок, используя файлы с именами «Sxx» и затем перемещая их в нужные папки.

Для создания папок:

foreach ($name in (Get-ChildItem -File | % {$_.BaseName -replace 'E\d{2}',''}))
  {
   if ($name -like 'S*') {
       New-Item -path "$name" -ItemType Directory
       }
  }

Для перемещения файлов:

get-childitem -File | where {$_ -like "S01*"} | move-Item -Destination "S01*"
get-childitem -File | where {$_ -like "S02*"} | move-Item -Destination "S02*"
...

и т. Д.

Есть идеи, как заменить метод жесткого кодирования для перемещения детали?

Если у вас есть какой-либо совет или лучший код для какой-либо детали, которая также была бы удивительной.

1 Ответ

0 голосов
/ 21 октября 2019

Ниже мой код. Я создал два цикла foreach, чтобы пройти один раз через все файлы, а затем через все папки. Я использовал подстроку, чтобы получить часть имен файлов.

$files = Get-ChildItem -File -Path C:\users\Lenovo\Desktop\Test
$dir = Get-ChildItem -Path C:\users\lenovo\Desktop\Test -Directory
foreach ($item in $files) {
    foreach ($folder in $dir)
    {
        if (($item.Name).Substring(0,3) -like $folder.Name)
        {
            Move-Item -Path $item.FullName -Destination $folder.FullName
        }
    }
}

Я создаю четыре файла с S01.txt по S04.txt, и это работает. Чтобы проверить, является ли ваша переменная пустой, вы можете написать переменную с Write-Host или чуть более продвинутую, вы можете использовать режим отладки, чтобы увидеть, что именно содержат ваши переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...