Использование операторов IF с несколькими условиями - PullRequest
0 голосов
/ 26 марта 2019

Мне нужно изменить несколько имен файлов в зависимости от их имени.

У меня есть файлы с такими именами.

001.mp3
002.mp3
003.mp3
004.mp3
005.mp3
...etc

Я создал некоторый код для достижения своей цели, например:

@echo off
for %%i in (*.mp3) do if %%~ni gtr 003 ren %%i %%~ni-new%%~xi

Я получил успешно желаемый результат, подобный этому:

001.mp3
002.mp3
003.mp3
004-new.mp3
005-new.mp3
...etc

Но сейчас я пробую что-то другое, например 'if между'.

Например:

@echo off
for %%i in (*.mp3) do 
if %%~ni between 001 && 003 ren %%i %%~ni-chapter-1%%~xi
if %%~ni between 004 && 006 ren %%i %%~ni-chapter-2%%~xi
if %%~ni between 007 && 020 ren %%i %%~ni-chapter-3%%~xi
if %%~ni between 021 && 030 ren %%i %%~ni-chapter-4%%~xi
if %%~ni between 031 && 045 ren %%i %%~ni-chapter-5%%~xi

поэтому желаемый результат будет таким:

001-chapter-1.mp3
002-chapter-1.mp3
003-chapter-1.mp3
004-chapter-2.mp3
005-chapter-2.mp3
006-chapter-2.mp3
007-chapter-3.mp3
008-chapter-3.mp3
009-chapter-3.mp3
010-chapter-3.mp3
...etc

Пожалуйста, помогите мне исправить этот код, как показано.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Полагаю, вы можете использовать отложенное расширение и удалить вложенные операторы If:

@Echo Off
SetLocal EnableDelayedExpansion
Set "i="
For /F "Delims=" %%A In ('Where .:???.mp3 2^>Nul')Do (
    If 1%%~nA Gtr 1000 Set "i=1"
    If 1%%~nA Gtr 1003 Set "i=2"
    If 1%%~nA Gtr 1006 Set "i=3"
    If 1%%~nA Gtr 1020 Set "i=4"
    If 1%%~nA Gtr 1030 Set "i=5"
    If 1%%~nA Gtr 1045 Set "i="
    If Defined i Ren "%%A" "%%~nA-chapter-!i!%%~xA"
)

В приведенном выше примере я использовал команду Where, чтобы ограничить возвращаемые мета-переменные значениями с 3 символьными базовыми именами. Это предотвратит повторный просмотр любых переименованных файлов, (так как вы переименовывали их в тот же каталог с тем же расширением, которое все равно будет соответствовать вашему шаблону *.mp3) .

Обратите внимание, что при этом фильтруются только файлы .mp3 с тремя символами, при этом не определяется, являются ли эти символы целыми числами. Я оставлю вас решать, хотите ли вы реализовать что-то подобное самостоятельно.

0 голосов
/ 26 марта 2019

Вы можете получить всю помощь по этому поводу, запустив if /? из cmd, но это более или менее идея сделать между:

@echo off
for %%i in (*.mp3) do (
  if %%~ni leq 003 ren %%i %%~ni-chapter-1%%~xi
  if %%~ni leq 006 if %%~ni gtr 003 ren %%i %%~ni-chapter-2%%~xi
  if %%~ni leq 020 if %%~ni gtr 006 ren %%i %%~ni-chapter-3%%~xi
  if %%~ni leq 030 if %%~ni gtr 020 ren %%i %%~ni-chapter-4%%~xi
  if %%~ni leq 045 if %%~ni gtr 030 ren %%i %%~ni-chapter-5%%~xi
)

Прямо от if /?

, где сравнение может быть одним из:

EQU - equal
NEQ - not equal
LSS - less than
LEQ - less than or equal
GTR - greater than
GEQ - greater than or equal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...