2011-03-03 9 views
8

Tengo la esperanza de lograr algo similar a lo de abajo, pero con pcutmp3:¿Arrastrar y soltar el archivo por lotes para varios archivos?

Drag and drop batch file for multiple files?

Tengo problemas para envolver mi cabeza alrededor de las adiciones Joey hizo ya que no suelo hacer esto, pero yo estoy queriendo soltar múltiples archivos (.cue) en un archivo por lotes y hacer que se ejecute más de una vez, que es lo que está sucediendo con las siguientes líneas en el archivo por lotes:

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

que he intentado adaptar el código de Joey ... pero fue en vano (no tengo ni idea de lo que estoy haciendo)

¡Gracias de antemano por cualquier ayuda!

Respuesta

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 

Este es su ciclo básico de "Coma todos los argumentos". La parte importante es la palabra clave shift, que come %1 y desplaza todos los argumentos por uno (de modo que %2 convierte %1, %3 convierte %2, etc)

Por lo tanto, si se ejecuta de esta manera:

pcutmp3.bat a b c 

se llamará java, así:

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

Hola Mike, gracias por tu ayuda! Estaba ejecutando el lote simplemente colocando archivos .cue encima. Después de intentar lo que dijiste, simplemente estoy obteniendo '/dir_path/test.cue" "inesperado en este momento' No estoy seguro de por qué ...? ¡Gracias de nuevo! – ar4s

+0

¡Malo! Olvidé que Explorer cita los nombres de los archivos. Básicamente, estaba yendo 'if" "somefile \ blahbah" "==" "', y no le gustaban todas las comillas extra. Actualicé el script para quitar las comillas correctamente. Además, con este cambio, el archivo por lotes ya no es compatible con DOS :( –

+0

bien, sí, esto definitivamente funcionó. Agradezco enormemente su ayuda con esto. ¡Salud! – ar4s

6

Tratar con %1, turno o %* podría fallar con arrastre & drop, porque el explorador no es muy inteligente, cuando crea la línea de comando.

archivos como Cool&stuff.cue no son citados por el explorador para que pueda obtener un línea_de_órdenes como
pcutmp3.bat Cool&stuff.cue

Así que en %1 sólo Cool incluso en %* sólo es Cool, pero después de la pcutmp3.bat fines, cmd.exe intenta ejecutar un stuff.cue.

Para manejar esto puedes usar esto, captura todos los nombres de archivos usando la variable 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. hay un límite de línea para arrastrar & operaciones de soltar de ~ 2048 caracteres, a pesar del límite de línea de lote "estándar" de 8191 caracteres.

Cuestiones relacionadas