Windows 10, переименовать все файлы * .jpg во всех подкаталогах, с номером, начинающимся с 1 - PullRequest
1 голос
/ 09 марта 2020

Мне нужно решение той же проблемы, но в Windows 10 . Рекурсивное переименование файлов .jpg во всех подкаталогах.

Я попытался с помощью следующей команды powershell, Get-ChildItem -Recurse -Include *.jpg | % { Rename-Item $_ -NewName ('{0:D1}.jpg' -f $i++)}

, но он переименовывает файлы в последовательном порядке без сброса индекса в 1 в каждой подпапке.

Ответы [ 2 ]

2 голосов
/ 09 марта 2020

Насколько мне известно, вы должны использовать его как вложенный foreach:

Foreach ($directory in (Get-ChildItem -Directory)){
     $i = 1
     Get-ChildItem $directory.Fullname -Recurse -Include *.jpg | % { Rename-Item $_ -NewName ('{0:D1}.jpg' -f $i++)}
}

Я проверил это, и оно сработало :) Если это сработало для вас, отметьте его как принятый ответ.

2 голосов
/ 09 марта 2020

Я думаю, вам нужны два отдельных Get-ChildItem командлета для этого. Первый соберет все подкаталоги, а при зацикливании, второй, соберет файлы в каждом каталоге:

Get-ChildItem -Path 'X:\RootFolder\where\the\files\are' -Recurse -Directory | ForEach-Object {
    $count = 1   # reset the counter for this subdir to 1
    Get-ChildItem -Path $_.FullName -Filter '*.jpg' -File | ForEach-Object {
        $_ | Rename-Item -NewName ('{0:D1}.jpg' -f $count++) -WhatIf
    }
}

Удалите -WhatIf, если вы удовлетворены результатами, показанными в консоли.

PS в заголовке написано *.png, но ваш код имеет дело с *.jpg. Не имеет значения, если вы установите фильтр на правильное расширение и соответственно измените новое имя в коде

...