Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Создание БАТ для переименования файла по определённой схеме (http://forum.oszone.net/showthread.php?t=340114)

MTIsur 15-04-2019 15:22 2867861

Создание БАТ для переименования файла по определённой схеме
 
Возможно ли сделать BAT для решения следующей задачи?
Буду крайне признателен, если кто-нибудь поможет.

Требуется:

Задать путь к папке, в которой нужно осуществить следующую задачу – скопировать название
каждой папки и переименовать файл с заданным расширением (пусть будет к примеру - *.EXE),
лежащий в каждой папке на название папки в которой лежит файл.

То что имеем изначально:

D:/RenamePapka


Map1Name
Файл.ЕХЕ
Файл.PDF
+другие файлы

Map2Name

Файл.ЕХЕ
Файл.PDF
+другие файлы

Map3Name_DD

Файл.ЕХЕ
Файл.PDF
+другие файлы

[и т.д.]


То, что требуется получить в итоге:

D:/RenamePapka

Map1Name

Map1Name.ЕХЕ
Файл.PDF
+другие файлы

Map2Name

Map2Name.ЕХЕ
Файл.PDF
+другие файлы

Map3Name_DD

Map3Name_DD.ЕХЕ
Файл.PDF
+другие файлы

[и т.д.]

alpap 15-04-2019 15:41 2867864

MTIsur, а если в папке несколько файлов с расширением exe ?
так, например, переименует один такой в папке (примерно первый по алфавиту, т.е. относительно рандомно), вывод ошибки специально заглушил
Код:

@echo off
set "d=C:\Papka"
set "ext=exe"

for /f "delims=" %%d in ('dir /ad/b/s "%d%"') do (
 pushd "%%d"
  for /f "delims=" %%f in ('dir /a-d/b/s "*.%ext%"') do 2>nul ren "%%f" "%%~nxd%%~xf"
 popd
)
pause& exit


MTIsur 15-04-2019 15:59 2867868

alpap, спасибо огромное! Всё работает как нужно.


В моём случае в 99% будет только один файл с данным расширением в каждой папке. Если допустить, что будет всё же несколько, то достаточно того, что переименует только один файл по данному формату (любой).
Остальные файлы с данным расширением можно удалить за ненадобностью.

megaloman 15-04-2019 20:24 2867899

MTIsur, До кучи
Цитата:

Цитата MTIsur
Остальные файлы с данным расширением можно удалить за ненадобностью. »

Код:

@Echo Off
cls
        Set "Fold=Z:\Box_In"
        Set "Mask=*.exe"

        For /f "delims=" %%d in ('2^>nul Dir /A:D /B /S "%Fold%\"') Do (
                For /f "delims=" %%f in ('2^>nul Dir /A:-D /B /O:-D "%%d\%Mask%"') Do (
                        If Exist "%%d\%%~nxd%%~xf" Del "%%d\%%f"
                        If Not Exist "%%d\%%~nxd%%~xf" Ren "%%d\%%f" "%%~nxd%%~xf"
                )
        )
Pause
GoTo :Eof



Время: 22:48.

Время: 22:48.
© OSzone.net 2001-