Repetição em lote do batchfile com contador

0

Ok, eu sei que a parte do loop é inválida, mas espero ajudar a dar uma ideia do que eu quero fazer. Em última análise, eu quero ser solicitado para os 3 valores (comentou as solicitações agora e hard coding para facilidade de teste), então eu quero que ele seja executado através do loop uma vez por CD (8 vezes neste exemplo). Quero que nomeie o arquivo .mp3 com um CD de incremento # ... CD1, CD2, CD3, etc. Se alguém tiver alguma melhoria, eles também serão bem-vindos! Estou postando meu código completo aqui para compartilhar com a comunidade.

@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
)

Versão final deste código (TRABALHANDO graças a @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
    
por BondUniverse 02.05.2014 / 16:19

1 resposta

2

Você deseja o comando FOR /L . Por exemplo:

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

Observe que você precisa dobrar o sinal de porcentagem de lead em um arquivo de lote. Então, para o seu loop de extração de CD:

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

Se estiver com dificuldades, tente colocar o seguinte em um arquivo em lote e ver se funciona:

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

Tente isso para uma solução completa:

@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.
)
    
por 02.05.2014 / 16:24