1

Я пытаюсь переименовать файл из The Big Bang Theory - The Prom Equivalency.mp4 в the.big.bang.theory-the.prom.equivalency.mp4 с помощью пакетного сценария. Вот что у меня так далеко:

@ECHO OFF
setlocal enabledelayedexpansion
FOR %%f IN (%*) DO (
    set filename=%%~nf
    set filename=!filename: =.!
    set filename=!filename: .-.=-!
    rem uncomment for debugging.
    rem if not "!filename!"=="%%~nf" ECHO RENAME "%%~dpnxf" "!filename!%%~xf" >> "%TEMP%\test.txt"
    rem comment for debugging.
    if not "!filename!"=="%%~nf" RENAME "%%~dpnxf" "!filename!%%~xf"
)

Файл, который я получаю, является The.Big.Bang.Theory.-.The.Prom.Equivalency.mp4 .

Что такое магический трюк, чтобы не дать ему поставить точки по обе стороны - и как я могу включить в скрипт команду нижнего регистра?

1 ответ1

1

Что такое магический трюк, чтобы не дать ему поставить точки по обе стороны от тире?

Давайте вернемся к этому.

Как мне избавиться от точек по обе стороны от тире?

Измени свой

set filename=!filename: .-.=-!

заявление к

set filename=!filename:.-.=-!

потому что они так, как у вас сейчас, вы ищете (пробел, точка, тире, точка), а эта последовательность отсутствует.


Хорошо теперь

Что такое магический трюк, чтобы не дать ему поставить точки по обе стороны от тире?

Просто поменяйте порядок ваших утверждений := (и соответственно измените тире).

set filename=!filename: - =-!
set filename=!filename: =.!

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


«Как я могу ввести в скрипт команду нижнего регистра?»

Ну, вы могли бы сделать

set filename=!filename:A=a!
set filename=!filename:B=b!
set filename=!filename:C=c!
        ⋮

что не очень элегантно  Но мне было указано, что это может быть сделано так же, как

set filename=!filename:a=a!
set filename=!filename:b=b!
set filename=!filename:c=c!
        ⋮

потому что := … сопоставление строк выполняется без учета регистра (например,::q=ent изменит «sqimQal» на «сентиментальный»). Таким образом, адаптируя ответ Магу на Преобразование имени файла из верхнего регистра в нижний…, мы можем упростить это до

for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
    set filename=!filename:%%a=%%a!
)

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