Мы использовали следующий пакетный файл для -years- для копирования (легальных) аудио-CD в MP3-файлы, которые наши сотрудники могут использовать на своих iPod. Но начиная с Windows 10 (Ver 1607 Build 14393.321) они больше не работают. Я думаю, проблема в том, что по какой-то причине Windows больше не «видит» файлы CDA на диске (по крайней мере, в командной строке). Проигрыватель Windows Media все еще распознает диск и выдаст «Rip», но это очень утомительно. Любой способ заставить этот файл BAT работать снова?

Проблема возникает в цикле FOR ... т.е. процедура немедленно завершается, потому что цикл не может «видеть» никаких файлов CDA.


FOR /R D:\ %%G IN (D:\*.cda) DO (CALL :TEST_VLC "%%G")

@ECHO OFF
CLS
set OLDDIR=%CD%

SET a=%1
IF %1.==. GOTO :help

SET t=%2
IF %2.==. GOTO :help

SET e=%3
IF %3.==. SET e=mp3

MD %2
CD %2
setlocal ENABLEDELAYEDEXPANSION
@ECHO Ripping %2 from %OLDDIR%
cmd /c wizmo.exe close
GOTO :goforit

:after
endlocal
@ECHO ON
c:\Util\id3\id3.exe -M -t "%a%_%%f" -a %a% -l %t% *.%e%
REM c:\Util\id3\id3 -a "Author_Name" -t "Disc_Title %f" *.mp3
cd /d %OLDDIR%
cmd /c wizmo.exe open
goto :eof


:goforit
ECHO goforit %e% Transcoding %2
SET /a y=0
SET /a PADDED=0%y%
FOR /R D:\ %%G IN (D:\*.cda) DO (CALL :SUB_VLC "%%G")
GOTO :after

:help
@ECHO Syntax: RIP Artist[artist] Subdir[disc1] Format[[mp3]/wav]
GOTO :eof


:TEST_VLC
ECHO After ripping routine


:SUB_VLC
call SET /a y=y+1
echo begin padding
echo pad with your desired width - 1 leading zeroes
call SET PADDED=0%y%
echo slice off any zeroes you don't need -- BEWARE, this can truncate the value
echo the 2 at the end is the number of desired digits
SET PADDED=%PADDED:~-2%
REM end padding
ECHO %e% Transcoding %2 file  %PADDED%
REM Here's where the actual transcoding/conversion happens. The next line
REM fires off a command to VLC.exe with the relevant arguments:
ECHO "C:\Program Files (x86)\VideoLAN\VLC\vlc" -I http cdda:///D:/ --cdda-track=!y! :sout=#transcode{vcodec=none,acodec=%e%,ab=320,channels=2,samplerate=44100}:std{access="file",mux=raw,dst="%t%!PADDING!.%e%"} vlc://quit
IF %e%==mp3 CALL "C:\Program Files (x86)\VideoLAN\VLC\vlc" -I http cdda:///D:/ --cdda-track=!y! :sout=#transcode{vcodec=none,acodec=%e%,ab=320,channels=2,samplerate=44100}:std{access="file",mux=raw,dst="%t%!PADDED!.%e%"} vlc://quit
IF %e%==wav CALL "C:\Program Files (x86)\VideoLAN\VLC\vlc" -I http cdda:///D:/ --cdda-track=!y! :sout=#transcode{vcodec=none,acodec=s16l,channels=2}:std{access="file",mux=wav,dst="%t%!PADDED!.%e%"} vlc://quit
:eof

1 ответ1

0

1) В .bat , в некоторых случаях, вы должны использовать %% вместо одного % .

2) Я думаю, что проблема может быть в другом. Вы должны отладить скрипт - добавьте эту строку внизу:

ping 127.0.0.1 -n 123 > nul

и затем запустите файл bat, и посмотрите журналы выполнения, что произошло успешно, а что нет.

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