2011-03-03 17 views
8

Spero di realizzare qualcosa di simile al di sotto, ma con pcutmp3:Trascina e rilascia il file batch per più file?

Drag and drop batch file for multiple files?

Ho problemi confezionamento mia testa intorno le aggiunte Joey fatto come io di solito non faccio questo, ma io sono voler rilasciare più file (.cue) su un file batch e lo hanno eseguito più di una volta, che è ciò che sta accadendo con le seguenti righe nel file batch:

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

che ho provato adattando il codice di Joey ... ma senza risultati (non ho idea di cosa sto facendo)

Grazie in anticipo per qualsiasi aiuto!

risposta

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 

Questo è il ciclo di base "Mangia tutti gli argomenti". La parte importante è la parola chiave shift, che mangia %1, e sposta tutti gli argomenti giù da uno (in modo che %2 diventa %1, %3 diventa %2, ecc)

Quindi, se lo si esegue in questo modo:

pcutmp3.bat a b c 

Si chiamerà Java in questo modo:

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

Ciao Mike, grazie per il tuo aiuto! Stavo eseguendo il batch semplicemente trascinando i file .cue su di esso. Dopo aver provato quello che hai detto, sto semplicemente ottenendo "/dir_path/test.cue" "inaspettato in questo momento. Non sei proprio sicuro del perché ...? Grazie ancora! – ar4s

+0

Il mio male! Ho dimenticato che Explorer citerà i nomi dei file. Fondamentalmente, stava andando "se" "somefile \ blahbah" "==" "', e non gli piacevano tutte le citazioni extra. Ho aggiornato lo script per rimuovere correttamente le virgolette. Inoltre, con questa modifica, il file batch non è più compatibile DOS :( –

+0

ok, sì, sicuramente ha funzionato.Mi apprezzo enormemente il tuo aiuto con questo.Acclamati! – ar4s

6

Trattare con %1, spostamento o %* potrebbe fallire con il drag & drop, perché explorer non è molto intelligente quando crea la riga di comando.

file come Cool&stuff.cue non sono quotati dall'esploratore in modo da ottenere un cmdline come
pcutmp3.bat Cool&stuff.cue

Quindi, in %1 è solo Cool anche in %* è solo Cool, ma dopo la pcutmp3.bat finisce, cmd.exe prova ad eseguire un stuff.cue.

Per gestire questa roba è possibile utilizzare questo, che cattura tutti i nomi di file utilizzando la variabile 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. c'è un limite di riga per il trascinamento delle operazioni di rilascio di & di ~ 2048 caratteri, nonostante il limite di riga di batch "standard" di 8191 caratteri.

Problemi correlati