2016-09-26 8 views
0

私は、自動的にプレイリストを生成するバッチスクリプト( - >windows batch .bat automatic .m3u playlist creation/update)を持っています。これらのプレイリストは、rootdirのサブフォルダに保存されます(コードを参照)。 問題は、サブフォルダがプレイリストで考慮されていないため、音楽ファイルが見つからないということです。私は動的バッチスクリプトの定数文字列

#EXTINF:???,The Realm Of Orzamar 
../Dragon Age Origins\The Realm Of Orzamar.mp3 

を必要とし

SET "location='.../' + %%c" 

ようなもので、私はそれが勝ったので、私はSET "location=%%c"にこの.../文字列を置くことができますどのように

#EXTINF:???,The Realm Of Orzamar 
:\music\Dragon Age Origins\The Realm Of Orzamar.mp3 

を取得

#EXTINF:???,The Realm Of Orzamar 
Dragon Age Origins\The Realm Of Orzamar.mp3 

を取得します' tはmusic\に変換されます。 filestructureはポータブルドライブに置かれているので絶対パスは決して解決策ではありません。したがって、Androidデバイスや絶対フルパスの異なるデバイスで使用するには、独立してフォルダルートから作業する必要があります。 私はバッチで不慣れなので、これまでのところ基本的なものはほとんどありませんでした。バッチ構文がわからないので、このスクリプトは実際には分かりません。

ありがとうございます。

コード:

CHCP 1252 
@ECHO Off 
SETLOCAL 

:: make a tempfile 
:maketemp 
SET "tempfile=%temp%\%random%" 
IF EXIST "%tempfile%*" (GOTO maketemp) ELSE (ECHO.>"%tempfile%a") 



:: Need the start of the tree to scan 
SET "rootdir=H:\music" 
>"%tempfile%b" (ECHO(%rootdir%&ECHO(*) 
FOR /f "delims=:" %%a IN ('FINDSTR /o /L "*" "%tempfile%b"') DO SET /a len=%%a-1 

SET "destfile=%~1" 

:loop 
SHIFT 
SET nextdir=%~1 
IF NOT DEFINED nextdir GOTO process 
IF %nextdir:~0,1%==\ (
PUSHD "%~1" 
FOR /f "delims=" %%a IN ('dir /b /s /a-d *.mp3 *.mp4 *.ogg *.m4a *.wma *.flac *.wav') DO >>"%tempfile%a" ECHO(%%~na:2:%%a 
) else (
PUSHD "%rootdir%\%~1" 
FOR /f "delims=" %%a IN ('dir /b /s /a-d *.mp3 *.mp4 *.ogg *.m4a *.wma *.flac *.wav') DO >>"%tempfile%a" ECHO(%%~na:%len%:%%a 
) 
POPD 
GOTO loop 

:process 
>%destfile% ECHO(#EXTM3U 
(
FOR /f "tokens=1,2*delims=:" %%a IN ('SORT "%tempfile%a"') DO (
ECHO(#EXTINF:???,%%a 
SET "location=%%c" 
SETLOCAL enabledelayedexpansion 
    ECHO(!location:~%%b! 
endlocal 
) 
)>>%destfile% 

del "%tempfile%*" 


GOTO :EOF 
+1

Windowsではバックスラッシュが標準であるため、パス区切り文字としてスラッシュを使用しないでください! – aschipfl

+0

私は手動で '... \'を試しても動作しませんでした。私は1つのフォルダレベルに上がる必要があります。これまでは '../'だけがこれまで仕事をしてきました。 –

答えて

0

はそれを自分で解決しました。私は間違った行を見た。

SET "location=%%c" 
SETLOCAL enabledelayedexpansion 
    set "location=!location:~%%b!" 
    set "back=../" 
    ECHO(!back!!location! 

ジョブを実行します。 !location:~%%b!はフル絶対パスからフォルダールートまでの先頭文字を削除するので、この後に文字列を追加するだけです。

+0

(stackoverflowが私にできるときの答えを受け入れる; 2日待たなければならないと言う) –

関連する問題