Пакетный файл, чтобы найти файлы с двойными расширениями и удалить последний
У меня есть несколько папок, в которых есть файлы с двойными расширениями и обычными расширениями. Мне нужно создать пакетный скрипт для поиска во всех папках и удаления последнего расширения с любыми файлами с двойным расширением. Ни одно из расширений файлов не является согласованным.
Here's an example
C:\test\regular.exe
C:\test\picture.jpg.doc
C:\newtest\document.doc.pdf
End Result I need
C:\test\regular.exe
C:\test\picture.jpg
C:\newtest\document.doc
2 ответа
@ECHO OFF
SETLOCAL
SET sourcedir=c:\sourcedir
FOR /r "%sourcedir%" %%i IN (*.*) DO (
FOR %%n IN ("%%~ni") DO IF NOT "%%~xn"=="" IF NOT EXIST "%%~dpni" ECHO REN "%%~fi" "%%~ni"
FOR %%n IN ("%%~ni") DO IF NOT "%%~xn"=="" IF EXIST "%%~dpni" ECHO CAN NOT REN "%%~fi" "%%~ni"
)
GOTO :EOF
Эта партия должна выполнить задачу.
Для каждого файла в дереве с корнем в sourcedir
если NAME
самого файла содержит "расширение", а имя файла без исходного расширения не существует, затем переименуйте файл. Таким образом, если ...picture.jpg.doc
найдено, переименование должно произойти только если ...picture.jpg
не существует.
Команда переименовать просто ECHO
редактор Вам нужно будет удалить ECHO
Ключевое слово для активации переименования - после проверки, что вы хотите сделать.
Я добавил вторую строку, чтобы сообщить, что переименование не может быть сделано из-за существующего файла. Это можно сделать немного лучше, но это будет работать.
Пересмотрено, чтобы изменить имя в случае, если простое переименование не может быть сделано.
Осторожно - эта версия будет сразу переименована - нет ECHO
Если вы сначала предоставляете список, потому что бессмысленно предоставлять такой список при переименовании файла, это может привести к разным результатам при главном запуске переименования.
@ECHO OFF
SETLOCAL
SET sourcedir=c:\sourcedir
FOR /r "%sourcedir%" %%i IN (*.*) DO (
FOR %%n IN ("%%~ni") DO IF NOT "%%~xn"=="" IF EXIST "%%~dpni" (
SET renreq=Y
FOR %%a IN (new alt extra another 1 2 3 4 5 6 7 8 9) DO IF DEFINED renreq (
IF NOT EXIST "%%~dpi%%~nn_%%a%%~xn" (
REN "%%~fi" "%%~nn_%%a%%~xn"
SET "renreq="
)
)
IF DEFINED renreq ECHO CAN NOT REN "%%~fi"
) ELSE (
REN "%%~fi" "%%~ni"
)
)
GOTO :EOF
Разумно очевидно, что список "дополнений" может быть расширен при необходимости.
Попробуйте это и удалите echo
, если вывод в порядке:
@echo off &setlocal
for /r \ %%i in (*) do (
for %%j in ("%%~ni") do if "%%~xj" neq "" echo ren "%%~fi" "%%~nj"
)
Редактировать: добавлена поддержка всего HD.