Зацикливание пакетного файла со счетчиком

1028
BondUniverse

Хорошо, я знаю, что часть цикла недействительна, но, надеюсь, поможет понять, что я хочу сделать. В конечном счете, я хочу получить подсказку для 3 значений (закомментировал запросы на данный момент и жесткое кодирование для простоты тестирования), затем я хочу, чтобы он проходил цикл один раз для каждого CD (так 8 раз в этом примере). Я хочу, чтобы он назвал файл .mp3 с инкрементным CD # ... CD1, CD2, CD3 и т. Д. Если у кого-то есть какие-либо улучшения, они тоже приветствуются! Я публикую свой полный код здесь, чтобы поделиться с сообществом.

@ECHO OFF  REM set /p BookName="Book Name: " REM set /p AuthorName="Author Name: " REM set /p CDNumber="Number of CDs: "  set BookName=Victory and Honor set AuthorName=W.E.B. Griffin set CDNumTot=8  set PathName=C:\Rip\%AuthorName%\%BookName% mkdir "C:\Rip\%AuthorName%\%BookName%\" REM cd C:\Program Files (x86)\freac  ECHO CD Count: %CDNumTot%  FOR /L %%N IN (1, 1, %CDNumTot%) DO ( Set FileName=%PathName%\%BookName% CD%%N.mp3 ECHO Filename: %FileName% ECHO\ ECHO Ripping CD# %%N... ECHO freaccmd -track all -o %FileName% ECHO CLS ECHO\ ECHO\ set /A NextCD=%%N ECHO Next: %NextCD ECHO Please Eject CD and insert next CD# %NextCD%... pause ) 

Окончательная версия этого кода (РАБОТАЕТ благодаря @JoeNahmias):

@ECHO OFF SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION  set /p BookName="Book Name: " set /p AuthorName="Author Name: " set /p CDNumTot="Total number of CDs: "  set PathName=C:\Rip\%AuthorName%\%BookName%   FOR /L %%N IN (1, 1, %CDNumTot%) DO ( cls ECHO\ ECHO Please insert CD# %%N... ECHO\ pause SET FileName=%PathName%\%BookName% CD%%N.mp3 cls ECHO\ ECHO Ripping CD# %%N... ECHO\ "C:\Program Files (x86)\freac\freaccmd" -track all -o "!FileName!" REM You need the id3 executable downloaded/installed for the next line: REM id3 -l "!BookName!" -a "!AuthorName!" -n %%N "!FileName!" rundll32 user32.dll,MessageBeep -1 ECHO\ ECHO Please eject CD# %%N... pause )  cls ECHO\ ECHO DONE! pause 
0
Обновил его для текущей версии, основываясь на примере @JoeNahmias, но кажется, что я не могу полностью прочитать переменные в коде или создать временное инкрементное значение в цикле (запрос следующего компакт-диска с номером ...). BondUniverse 10 лет назад 0
Самое главное, что строка «Set FileName =% PathName% \% BookName% CD %% N.mp3» выходит пустой ... BondUniverse 10 лет назад 0

1 ответ на вопрос

2
JoeNahmias

Вы хотите FOR /Lкоманду. Например:

C:\>SET num=7 C:\>FOR /L %I IN (1, 1, %num%) DO @echo %I 1 2 3 4 5 6 7 

Обратите внимание, что вы должны удвоить знак процента свинца в пакетном файле. Итак, для вашего цикла копирования CD:

FOR /L %%n IN (1, 1, %CDNumTot%) DO ( SET FileName=%PathName%\%BookName% CD %%n.mp3 ... ) 

Если у вас возникли трудности, попробуйте поместить следующее в командный файл и посмотрите, работает ли он:

@ECHO OFF SET num=7 FOR /L %%I IN (1, 1, %num%) DO @echo %%I 

Попробуйте это для полного решения:

@ECHO OFF SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION  REM set /p BookName="Book Name: " REM set /p AuthorName="Author Name: " REM set /p CDNumTot="Total number of CDs: "  set BookName=Victory and Honor set AuthorName=W.E.B. Griffin set CDNumTot=8  set PathName=C:\Rip\%AuthorName%\%BookName% REM mkdir "C:\Rip\%AuthorName%\%BookName%\" REM cd C:\Program Files (x86)\freac  ECHO CD Count: %CDNumTot%  FOR /L %%N IN (1, 1, %CDNumTot%) DO ( ECHO Please Eject CD and insert next CD# %%N... pause SET FileName=%PathName%\%BookName% CD%%N.mp3 ECHO Filename: !FileName! ECHO. ECHO Ripping CD# %%N... ECHO freaccmd -track all -o "!FileName!" ECHO CLS ECHO. ECHO. ) 
Если я использую следующее, я получаю сообщение об ошибке «CDNumTot) было неожиданным в это время». , FOR / L% I IN (1, 1,% CDNumTot%) DO (@echo% I ECHO Следующий шаг1 CD% I ECHO Следующий шаг1 CD% I), BondUniverse 10 лет назад 0
Извините, не знаю, как ввести код в комментарии, чтобы он отображался правильно ... BondUniverse 10 лет назад 0
@BondUniverse: вы можете запустить первые команды, которые я дал из командной строки, и посмотреть, работает ли это? JoeNahmias 10 лет назад 0
@BondUniverse, вы должны использовать два знака процента для переменной цикла внутри пакетного файла JoeNahmias 10 лет назад 0
С этим последним редактированием я получаю значение «n» вместо числа ... BondUniverse 10 лет назад 0
@BondUniverse, пожалуйста, опубликуйте свой текущий код в виде редактирования вопроса JoeNahmias 10 лет назад 0
Обновил мой оригинальный код и разместил комментарии о том, что не работает. BondUniverse 10 лет назад 0
Это работало! Я собираюсь опубликовать свою слегка подправленную версию в моей оригинальной заметке. BondUniverse 10 лет назад 0

Похожие вопросы