Batch simple mais qui ne marche pas

Bonjour à tous !

Alors voilà, je suis en train de créer un tout petit fichier batch mais pour je ne sais quelle raison, il plante !

Voici ce que je souhaite faire :
J'ai un executable (ffmpeg.exe, il recevra une ligne de commande) et mon fichier batch (Compresser.bat), le but est simplement avec un drag & drop de lancer l'encodage d'une vidéo, ca marche très bien, a part si j'ajoute une condition particuliere.

Ce fichier marche :
@echo off

set dir=%~dp0
set exe="%dir%ffmpeg.exe"
set out="%dir%out.avi"
set in=%1

if exist %out% echo ERREUR : Le fichier out.avi est present (surement une video precedement compressee), supprimez-le puis recommencez... & pause & exit

%exe% -i %in% -acodec libmp3lame -ar 44100 -ab 128k -ac 2 -vcodec copy -threads 2 -y %out%

pause & exit


Ce fichier ne marche pas :
@echo off

set dir=%~dp0
set exe="%dir%ffmpeg.exe"
set out="%dir%out.avi"
set in=%1

if exist %out% echo ERREUR : Le fichier out.avi est present (surement une video precedement compressee), 

supprimez-le puis recommencez... & pause & exit

if "%1"=="" echo Glissez/Deposez votre fichier .AVI sur Compresser.bat & pause & exit

%exe% -i %in% -acodec libmp3lame -ar 44100 -ab 128k -ac 2 -vcodec copy -threads 2 -y %out%

pause & exit


Donc en gros, c'est le if "%1"=="" qui faire foirer.

Quelqu'un aurait une piste ?

4 réponses

  1. Hello,

    Chez moi ça fonctionne .. enfin dans le sens ou le fichier .bat ne se ferme pas tout seul ! ( Car je n'ai pas ffmpeg.exe )

    Fait attention, dans le 2ème .bat, ceci:
    supprimez-le puis recommencez... & pause & exit


    Est "détaché" de la commande Echo précédente, cela génère une erreur.

    Sinon la condition est bonne, qu'entends-tu par "ça ne marche pas" ?
    ++
    0
    1. En fait la ligne est coupée ici mais dans le fichier, tout est collé.

      Et bien le probleme est que si je lance Compresser.bat sans faire de drag & drop d'un fichier, j'ai l'erreur "Glissez/Deposez votre fichier .AVI sur Compresser.bat"

      Si le fichier out existe, j'ai l'erreur "Le fichier out.avi est present[...]"

      Si je drag & drop un fichier avi, la fenetre se ferme.
      Mais si je supprime la ligne "if "%1"=="" echo Glissez/Deposez votre fichier .AVI sur Compresser.bat & pause & exit" ca marche

      Meme en changeant le message d'erreur, en mettant juste "Erreur" ca ne marche pas.
      0
      1. Re,

        Et bien le probleme est que si je lance Compresser.bat sans faire de drag & drop d'un fichier, j'ai l'erreur "Glissez/Deposez votre fichier .AVI sur Compresser.bat" 


        ça c'est normal étant donné que %1 est égal à rien .

        Si le fichier out existe, j'ai l'erreur "Le fichier out.avi est present[...]" 

        C'est normal aussi, vu que la condition " If exist %out% " est juste .

        Par contre, si je glisse un fichier .Avi, le .bat arrive à terme, contrairement à chez toi .

        il ne me semble pas que ce soit la condition qui soit fausse, mais plutôt ta ligne de commande envoyée à ffmpeg.exe .

        Rééssaye en entourant de guillemets %in% car si le chemin d'accès possède un espace, ça peut ne pas marcher

        Tu peux aussi essayer d'agencer un peu mieux le code, enchaîner les commandes avec " & " c'est un peu crade ^^ .
        Echappe aussi les parenthèses, c'est interprété comme du code sinon.

        Dit moi si ce code fonctionne:

        @echo off
        
        set dir=%~dp0
        set exe="%dir%ffmpeg.exe"
        set out="%dir%out.avi"
        set in=%1
        
        if exist %out% (
        	echo ERREUR : Le fichier out.avi est present ^(surement une video precedement compressee^), supprimez-le puis recommencez...
        	pause
        	exit
        	)
        
        if "%1"=="" (
        	echo Glissez/Deposez votre fichier .AVI sur Compresser.bat
        	pause
        	exit
        	)
        
        %exe% -i "%in%" -acodec libmp3lame -ar 44100 -ab 128k -ac 2 -vcodec copy -threads 2 -y %out%
        
        pause & exit


        0
        1. La commande est bonne et est entourée de guillets, voici le résultat avec echo :
          "C:\Documents and Settings\Lossius\Bureau\ffmpegTutoPad\ffmpeg.exe" -i "C:\Documents and Settings\Lossius\Bureau\ffmpegTutoPad\Tutoriel Comment créer un tutoriel vidéo.avi" -acodec libmp3lame -ar 44100 -ab 128k -ac 2 -vcodec copy -threads 2 -y "C:\Documents and Settings\Lossius\Bureau\ffmpegTutoPad\out.avi"

          Si je la lance dans l'invité de commandes, ca marche parfaitement.

          Je viens d'essayer le code que tu m'as donné, il se ferme toujours quand je fais mon drag & drop :(

          Si je vire les guillemets au niveau de "%exe% -i %in%", et que j'enleve la condition :
          if "%1"=="" (
          echo Glissez/Deposez votre fichier .AVI sur Compresser.bat
          pause
          exit
          )

          Ca marche parfaitement

          Je comprends pas du tout, ou est la logique lol?
          0
          1. Re,
            J'ai trouvé ;)

            En fait quand %1 est un nom de fichier qui contient un espace, windows l'encadre automatiquement de guillemets ..

            Or nous, nous testons:

            If "%1" == "" ..

            Or "%1" -> ""tonfichieravecdesdoublesguillemets""

            ce qui fait planter cmd .
            Pour palier à ça, remplace "%1" par: "%~1"

            ++
            0
          2. Merci beaucoup ! je test ca des aujourdhui et je te tiens au courant, en tout cas merci pour cette réponse !
            0