2011-03-03 34 views
8

私は以下のようなものを達成するために期待していますが、pcutmp3で:バッチファイルを複数のファイルにドラッグアンドドロップしますか?

Drag and drop batch file for multiple files?

私はトラブル私は通常これを行わないとジョーイがなさ追加のまわりで私の頭をラップしたが、私よバッチファイルに次の行で何が起こっているかである、バッチファイルに複数のファイル(.cue)をドロップすると、それが複数回実行していたいと思っています:

@echo off 
title pcutmp3 
cd /d "F:\pcutmp3" 
java -jar pcutmp3.jar --cue %1 --dir "F:\Test" 
pause 
exit 

私はジョーイのコードを適応しようとしました...しかし役に立たない(私は何をしているのかわからない)

任意の助けを事前に感謝!

答えて

8
@echo off 
title pcutmp3 
cd /d "F:\pcutmp3" 

:again 
if "%~1" == "" goto done 

java -jar pcutmp3.jar --cue "%~1" --dir "F:\Test" 

shift 
goto again 

:done 
pause 
exit 

これは基本的な「すべての引数を取る」ループです。あなたはそのようにそれを実行する場合の重要な部分は、だから、%1を食べるshiftキーワードで、(%2はなど、%3%2なり、%1なるように)1により、すべての引数をシフトダウン

pcutmp3.bat a b c 

それはそうのようなJavaを呼び出します:

java -jar pcutmp3.jar --cue "a" --dir "F:\Test" 
java -jar pcutmp3.jar --cue "b" --dir "F:\Test" 
java -jar pcutmp3.jar --cue "c" --dir "F:\Test" 
+0

こんにちは、マイク、あなたの助けに感謝!私はその上に.cueファイルをドロップするだけでバッチを実行していました。あなたが言ったことを試した後、私は単に '/dir_path/test.cue 'を"今度は予期せぬ "ものにしています。再度、感謝します! – ar4s

+0

私の悪い! Explorerがファイル名を引用するのを忘れてしまった。基本的には、 "if" somefile \ blahbah "" == "" 'となっていました。余分な引用符をすべて好きではありませんでした。引用符を適切に削除するようにスクリプトを更新しました。 。!あなたはまた、チェックを刻むことにより、(正式には、この答えを受け入れることができます:。また、この変更で、バッチファイルは、もはやDOS互換性があります:( –

+0

OK、はい、これは間違いなく、私はこれで非常にあなたの助けに感謝乾杯ar4fs @ – ar4s

6

は、ドラッグで失敗する可能性があり%1、シフトまたは%*への対処エクスプローラは非常にスマートではないので、コマンドラインを作成するとき、ドロップします。

ファイルあなたは
pcutmp3.bat Cool&stuff.cue

のようなコマンドラインパラメータがそう%1にのみCoolでも%*であるだけCoolですが、pcutmp3.batが終了した後、cmd.exeを得るようCool&stuff.cueは、エクスプローラで引用されていないようにstuff.cueを実行しようとします。あなたがこれを使用することができますこのようなものを処理するには

、それはcmdcmdline変数を使用して、すべてのファイル名をキャッチ。

@echo off 
setlocal ENABLEDELAYEDEXPANSION 
rem *** Take the cmd-line, remove all until the first parameter 
rem *** Copy cmdcmdline without any modifications, as cmdcmdline has some strange behaviour 
set "params=!cmdcmdline!" 
set "params=!params:~0,-1!" 
set "params=!params:*" =!" 
set count=0 

rem Split the parameters on spaces but respect the quotes 
for %%G IN (!params!) do (
    set /a count+=1 
    set "item_!count!=%%~G" 
    rem echo !count! %%~G 
) 

rem list the parameters 
for /L %%n in (1,1,!count!) DO (
    echo %%n #!item_%%n!# 
) 
pause 

REM ** The exit is important, so the cmd.exe doesn't try to execute commands after ampersands 
exit 

Btw。 「標準」バッチ行の制限が8191文字であるにもかかわらず、ドラッグ操作の行制限が〜2048文字である&です。

関連する問題