Verification

Verification - Shell/Batch - Programmation

Marsh Posté le 27-04-2006 à 20:09:46    

Hello !
 
Comment faire pour vérifier par un batch si un fichier existe ???
 
Merci !

Reply

Marsh Posté le 27-04-2006 à 20:09:46   

Reply

Marsh Posté le 27-04-2006 à 21:06:57    

Si c'est sous Unix en ksh (bash aussi je suppose), alors faire
 

if ! [ -f "nom_fichier" ] ; then
   echo "Fichier inexistant."
fi

 

Si c'est pour Windows, alors utiliser le script VBS suivant :
 

Set fso = CreateObject("Scripting.FileSystemObject" )
If (fso.FileExists("nom_fichier" ) = False) Then
   wscript.echo = "Fichier inexistant."
End If

 

 
 

Reply

Marsh Posté le 27-04-2006 à 21:46:57    

Il me semble qu'il n'y a pas besoin de VBS pour windows :
 

Code :
  1. IF NOT EXIST test.txt ECHO Le fichier "test.txt" n'existe pas.
  2. IF EXIST test.txt ECHO Le fichier "test.txt" existe .

Reply

Marsh Posté le 28-04-2006 à 10:31:22    

olivthill a écrit :

Si c'est sous Unix en ksh (bash aussi je suppose), alors faire
 

if ! [ -f "nom_fichier" ] ; then
   echo "Fichier inexistant."
fi



 
Il y a deux erreurs
1) le point d'exclamation doit être dans les crochets et non en dehors (il fait intégralement partie des options de la commande "test" dont les crochets en sont un synonyme)
2) l'option "-f" de test vérifie que le fichier est un fichier régulier (le test renverra "inexistant" si "nom_fichier" est un répertoire, ou un socket, etc...). L'option "existence" de test en bash se fait avec "-e"
=>

if [ ! -e "nom_fichier" ] ; then
   echo "Fichier inexistant."
fi


 
Le pb est que l'option "-e" n'est présente qu'en bash. Si tu bosses sur des systèmes plus vieux style sh ou ksh, t'es coinçé => solution: utiliser "ls" et vérifier le code d'erreur

ls -d "nom_fichier" 1>/dev/null 2>&1
if [ $? -ne 0 ] ; then
   echo "Fichier inexistant."
fi

Message cité 1 fois
Message édité par Sve@r le 28-04-2006 à 10:36:39

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 02-05-2006 à 10:10:16    

Merci beaucoup !
 
A+

Reply

Marsh Posté le 02-05-2006 à 11:11:03    

Sve@r a écrit :

le point d'exclamation doit être dans les crochets et non en dehors (il fait intégralement partie des options de la commande "test" dont les crochets en sont un synonyme)


 
Suite à un MP d'olivthill me disant que le point d'exclamation en dehors du test était accepté en ksh, j'ai testé et, effectivement, en ksh (comme en bash ou en ash) il est autorisé d'inverser le résultat booléen d'une commande en la faisant précéder d'un point d'exclamation.
Mais faut pas confondre le point d'exclamation placé devant une commande (par exemple "test" mais pas forcément) et le point d'exclamation placé dans la commande "test" => même si les deux font la même chose, le premier inverse la commande quelle qu'elle soit (ex: if ! false; then echo ok; fi) et le second est une instruction spécifique à "test" pour inverser l'expression logique placée dans le test
 
Merci à olivthill - C'est toujours agréable d'apprendre qqchse de nouveau  ;)


Message édité par Sve@r le 02-05-2006 à 11:16:17

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed