Batch simple mais qui ne marche pas

Fermé
lossius30 Messages postés 22 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 5 juin 2014 - 7 sept. 2010 à 22:26
lossius30 Messages postés 22 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 5 juin 2014 - 9 sept. 2010 à 03:15
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 ?

A voir également:

4 réponses

Utilisateur anonyme
7 sept. 2010 à 22:32
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
lossius30 Messages postés 22 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 5 juin 2014
7 sept. 2010 à 22:39
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
Utilisateur anonyme
7 sept. 2010 à 22:54
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
lossius30 Messages postés 22 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 5 juin 2014
7 sept. 2010 à 23:17
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
Utilisateur anonyme
8 sept. 2010 à 16:30
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
lossius30 Messages postés 22 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 5 juin 2014
9 sept. 2010 à 03:15
Merci beaucoup ! je test ca des aujourdhui et je te tiens au courant, en tout cas merci pour cette réponse !
0