Простой, но неуклюжий метод - переименовать файлы дважды - сначала удалите .srt
, затем измените .en
на .srt
(учитывая, что других файлов *.en
) нет:
ren "*.en.srt" "*." & ren "*.en" "*.srt"
Более элегантным решением является решение, предоставленное пользователем Mofi в его комментарии :
@for /F "eol=| delims=" %I in ('dir "*.en.srt" /B /A:-D 2^> nul') do @for %J in ("%~nI") do @ren "%~I" "%~nJ%~xI"
В пакетном файле этот код будет выглядеть примерно так (обратите внимание на обязательные удвоенные %
-сигналы):
@echo off
rem // Loop through all matching files:
for /F "eol=| delims=" %%I in ('dir "*.en.srt" /B /A:-D 2^> nul') do (
rem /* There are `~`-modifiers for `for` meta-variables that allow to split file names:
rem `~n` returns the base name, so the (last) extension becomes removed;
rem `~x` returns the extension (including the leading `.`);
rem therefore, `%%~nI` is the original file name with `.srt` removed, hence
rem ending with `.en`, and `%%~xI` is the original extension `.srt`;
rem another loop is used to also split off `.en` from `%%~nI`: */
for %%J in ("%%~nI") do (
rem /* Now `%%~J` returned the same as `%%~nI`, but `%%~nJ` removes `.en`;
rem so finally, rename the file to `%%~nJ` plus the original extension `.srt`: */
ren "%%~I" "%%~nJ%%~xI"
)
)
После полного потока Как команда Windows RENAME интерпретирует подстановочные знаки ? на Суперпользователь , я обнаружил, что есть способ с помощью одной команды ren
:
ren "*.en.srt" "?????????????????????????????????????????.srt"
Однако вам нужно убедиться, что достаточно ?
, а именно столько символов, сколько есть в имени файла с самым длинным соответствием без .en.srt
; в противном случае имена файлов становятся усеченными. Вы можете избежать усечения, заменив ту же последовательность ?
вместо *
, поэтому более длинные имена файлов вообще не переименовываются:
ren "?????????????????????????????????????????.en.srt" "?????????????????????????????????????????.srt"
В любом случае, это работает только тогда, когда исходные имена файлов не содержать больше .
кроме двух в .en.srt
; в противном случае все, что находится за первым .
, удаляется и (наконец, заменяется srt
).