Я знаю, что такие вопросы уже есть, но они тоже:

  • Скинь ошибки, что файл не найден
  • Не работают или они заглавные вместо

Я не могу оставлять комментарии в других опубликованных ответах из-за низкой репутации.

Я тоже не против, если он .bat запускался в целевом каталоге или запускался из командной строки напрямую. Я могу делать только основные вещи в MS-DOS.

Пока я могу установить каталог, который хочу:

x:
cd x:/folder1/folder2/target_folder

В результате я хочу это:

some_folder_in_target_folder/IMAGE1.jpg
some_folder_in_target_folder/Second/image1.JPG
some_folder_in_target_folder/Second/IMAGE2.JPG
some_folder_in_target_folder/Second/image3.jpg

выглядеть как:

some_folder_in_target_folder/image1.jpg
some_folder_in_target_folder/Second/image1.jpg
some_folder_in_target_folder/Second/image2.jpg
some_folder_in_target_folder/Second/image3.jpg

Я не хочу изменять имена папок сами.

Эти файлы находятся на USB-накопителе. Я не знаю, является ли это причиной некоторых ошибок, которые я видел в других примерах кода, которые я пробовал.

1 ответ1

0

Я не согласен с Сетом и Луру в этом особом случае, есть замечательное решение с небольшим недостатком, эта строка cmd должна исправить это (если вывод выглядит правильно, уберите эхо):

For /r X:\Path %A in (.) do @For /f "eol=: delims=" %F in ('dir /l/b/a-d "%A" 2^>NUL') do @Ren "%~fA\%F" "%F"

В партии % должен быть удвоен:

For /r X:\Path %%A in (.) do @for /f "eol=: delims=" %%F in (
  'dir /l/b/a-d "%%A" 2^>NUL'
) do Ren "%%~fA\%%F" "%%F"

Напротив, преобразование в верхний регистр будет выглядеть неуклюже в пакетном режиме.

Решение PowerShell:

Get-ChildItem -Path X:\path -File|
  where-Object {$_.Name -cne $_.Name.ToLower()}|
    Rename-Item -NewName {$_.Name.ToLower()} -confirm

То же самое с псевдонимами как один лайнер:

gci -Path X:\path -File|? {$_.Name -cne $_.Name.ToLower()}|Ren -new {$_.Name.ToLower()} -confirm

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .