[Batch/CMD] Массовое переименование файлов/ папок по списку

нужен bat скрипт, который переименовывал бы менял расширения в текущей папке и всех подпапках. То есть, он должен искать файл с определенным расширением, и присваивать ей другое определенное расширение файла.
Вот пример bat-скрипта, который переименовывает файлы с определенным расширением в текущей папке и всех подпапках:

Код:
@echo off
setlocal enabledelayedexpansion

set "old_ext=.txt"  REM Укажите старое расширение файла
set "new_ext=.docx" REM Укажите новое расширение файла

for /r %%i in (*%old_ext%) do (
    set "file=%%i"
    set "new_file=!file:%old_ext%=%new_ext%!"

    ren "!file!" "!new_file!"
)

echo Файлы с расширением %old_ext% переименованы в файлы с расширением %new_ext%.

В этом скрипте переменные old_ext и new_ext определяют старое и новое расширения файлов соответственно. Скрипт будет искать файлы с указанным старым расширением в текущей папке и всех подпапках, и заменять их на новое расширение.

Сохраните этот скрипт в текстовом файле с расширением .bat в нужной вам папке, запустите его, и он должен переименовать файлы с указанным расширением. Пожалуйста, убедитесь, что указываете правильные старое и новое расширения файлов в скрипте перед запуском.
 
Не работает, пробовал запускать просто и от имени админисратора, ничего не переименовано.
 
Не работает, пробовал запускать просто и от имени админисратора, ничего не переименовано.
Давайте попробуем уточнить скрипт для более надежной работы. Вот обновленный bat-скрипт, который должен более точно переименовывать файлы с определенным расширением в текущей папке и всех подпапках:

Код:
@echo off
setlocal enabledelayedexpansion

set "old_ext=.txt"  REM Укажите старое расширение файла
set "new_ext=.docx" REM Укажите новое расширение файла

for /r %%i in (*%old_ext%) do (
    set "file=%%~fi"
    set "new_file=!file:%old_ext%=%new_ext%!"

    ren "!file!" "!new_file!"
)

echo Файлы с расширением %old_ext% переименованы в файлы с расширением %new_ext%.

Этот обновленный скрипт должен более надежно работать. Он использует переменную %%~fi, чтобы получить полный путь к файлу, что может помочь избежать проблем с путями к файлам в разных подпапках.

Сохраните этот скрипт в текстовом файле с расширением .bat в нужной вам папке, укажите старое и новое расширения файлов, запустите его и проверьте, переименовались ли файлы. Пожалуйста, дайте знать, если у вас возникнут какие-либо дополнительные проблемы.
 
Не работает. Все файлы остались со старыми расширениями.
Давайте попробуем другой подход. Вместо использования bat-скрипта, можно воспользоваться PowerShell скриптом для переименования файлов с определенным расширением в текущей папке и всех подпапках. Вот пример PowerShell скрипта, который может помочь вам:

PowerShell:
$oldExt = ".txt"  # Укажите старое расширение файла
$newExt = ".docx" # Укажите новое расширение файла

Get-ChildItem -Recurse -Filter "*$oldExt" | ForEach-Object {
    $newName = $_.Name -replace [regex]::Escape($oldExt), $newExt
    Rename-Item -Path $_.FullName -NewName $newName
}

Write-Host "Файлы с расширением $oldExt переименованы в файлы с расширением $newExt."

Сохраните этот скрипт в файле с расширением .ps1. Затем откройте PowerShell, перейдите в папку с вашими файлами и запустите скрипт. Он должен переименовать файлы с указанным старым расширением в новые файлы с указанным новым расширением.

Если у вас возникнут проблемы или вопросы при использовании этого PowerShell скрипта, пожалуйста, дайте знать.
 
Вот рабочий скрипт:
@echo off
set "sdir=c:\Ваша папка\"

for /d /r "%sdir%" %%d in (*) do (
pushd "%%d"
For /r %%i In (".старое") do ren "%%i" ".новое"
popd
)
Прописывайте свой путь и свои расширения, все работает.
 
Последнее редактирование:
Вот рабочий скрипт:
@echo off
set "sdir=c:\Ваша папка\"

for /d /r "%sdir%" %%d in (*) do (
pushd "%%d"
For /r %%i In (".старое") do ren "%%i" ".новое"
popd
)
Прописывайте свой путь и свои расширения, все работает.
Спасибо за предоставленный рабочий скрипт! Этот bat-скрипт будет рекурсивно переименовывать файлы с определенным расширением в текущей папке и всех подпапках. Пользователям, которые столкнутся с подобной задачей, можно использовать этот скрипт, указав свои пути и расширения файлов для переименования.

Если у вас возникнут другие вопросы или задачи, не стесняйтесь обращаться. Я здесь, чтобы помочь!
 
При нажатии на кнопку "ответить" в моем скрипте изчезают символы "*" в скрипте. Запишу эти символы словами, Вы естественно ставте вместо слов символы.

@echo off
set "sdir=c:\Ваша папка\"

for /d /r "%sdir%" %%d in (*) do (
pushd "%%d"
For /r %%i In ("звезда.старое") do ren "%%i" "звезда.новое"
popd
)
 
Маленькое уточнение. Этот БАТ переименовывает файлы во всех подпапках, в текущей папке файлы остаются прежними.
Пример:
set "sdir=c:\Ваша папка\ - в данном случае переименуются файлы во всех подпапках, в папке c:\Ваша папка\" переименования не будет.
 
Маленькое уточнение. Этот БАТ переименовывает файлы во всех подпапках, в текущей папке файлы остаются прежними.
Пример:
set "sdir=c:\Ваша папка\ - в данном случае переименуются файлы во всех подпапках, в папке c:\Ваша папка\" переименования не будет.
Понял, спасибо за уточнение. Если вам нужно переименовать файлы только в подпапках, но не в текущей папке, вот обновленная версия bat-скрипта:

Код:
@echo off
set "sdir=c:\Ваша папка\"

for /d /r "%sdir%" %%d in (*) do (
    pushd "%%d"
    For /r %%i In ("*.старое") do ren "%%i" "*.новое"
    popd
)

Этот скрипт будет рекурсивно переименовывать файлы с указанным старым расширением только в подпапках, но не в текущей папке. Укажите свой путь и соответствующие расширения файлов для переименования. Пожалуйста, попробуйте этот скрипт и дайте знать, если у вас возникнут какие-либо вопросы.
 
Последнее редактирование модератором:
Назад
Сверху Снизу