205 votes

Comment vérifier si un fichier existe dans un fichier batch ?

Je dois créer un .BAT qui fait cela :

  1. Si C:\myprogram\sync\data.handler existe, exit ;
  2. Si C:\myprogram\html\data.sql n'existe pas, exit ;
  3. Sur C:\myprogram\sync\ supprimer tous les fichiers et dossiers sauf ( test , test3 y test2 )
  4. Copie C:\myprogram\html\data.sql a C:\myprogram\sync\
  5. Appeler un autre fichier batch avec l'option sync.bat myprogram.ini .

Si c'était dans l'environnement Bash, c'était facile pour moi, mais je ne sais pas comment tester si un fichier ou un dossier existe et si c'est un fichier ou un dossier.

322voto

stuartd Points 22668

Vous pouvez utiliser IF EXIST pour vérifier la présence d'un fichier :

IF EXIST "filename" (
  REM Do one thing
) ELSE (
  REM Do another thing
)

Si vous n'avez pas besoin d'un "autre", vous pouvez faire quelque chose comme ceci :

set __myVariable=
IF EXIST "C:\folder with space\myfile.txt" set __myVariable=C:\folder with space\myfile.txt
IF EXIST "C:\some other folder with space\myfile.txt" set __myVariable=C:\some other folder with space\myfile.txt
set __myVariable=

Voici un exemple concret de recherche d'un fichier ou d'un dossier :

REM setup

echo "some text" > filename
mkdir "foldername"

REM finds file    

IF EXIST "filename" (
  ECHO file filename exists
) ELSE (
  ECHO file filename does not exist
)

REM does not find file

IF EXIST "filename2.txt" (
  ECHO file filename2.txt exists
) ELSE (
  ECHO file filename2.txt does not exist
)

REM folders must have a trailing backslash    

REM finds folder

IF EXIST "foldername\" (
  ECHO folder foldername exists
) ELSE (
  ECHO folder foldername does not exist
)

REM does not find folder

IF EXIST "filename\" (
  ECHO folder filename exists
) ELSE (
  ECHO folder filename does not exist
)

1 votes

Comment vérifier le chemin complet avec le nom du fichier ? Des points bonus si le chemin contient des espaces. Comme l'OP l'a dit, simple en BASH.

2 votes

@Nick : Simple en cmd aussi - veuillez poser une autre question - ils ne coûtent pas cher. Ajouter un commentaire à une question qui date de plus de trois ans n'est pas susceptible d'obtenir beaucoup de réponses (mais vérifiez d'abord sur SO les réponses à cette question précise, sinon votre nouvelle question sera marquée comme un doublon...).

9 votes

Juste quelque chose à noter du IF /? fichier d'aide : The ELSE clause must occur on the same line as the command after the IF. Ça m'a brûlé. J'espère que ça vous aidera.

13voto

Avrumi Sherman Points 28

Voici un bon exemple sur la façon de faire une commande si un fichier existe ou non :

if exist C:\myprogram\sync\data.handler echo Now Exiting && Exit
if not exist C:\myprogram\html\data.sql Exit

Nous allons prendre ces trois fichiers et les placer dans un endroit temporaire. Après avoir supprimé le dossier, il restaurera ces trois fichiers.

xcopy "test" "C:\temp"
xcopy "test2" "C:\temp"
del C:\myprogram\sync\
xcopy "C:\temp" "test"
xcopy "C:\temp" "test2"
del "c:\temp"

Utilisez le XCOPY00 commandement :

xcopy "C:\myprogram\html\data.sql"  /c /d /h /e /i /y  "C:\myprogram\sync\"

Je vais expliquer ce que le /c /d /h /e /i /y signifie :

  /C           Continues copying even if errors occur.
  /D:m-d-y     Copies files changed on or after the specified date.
               If no date is given, copies only those files whose
               source time is newer than the destination time.
  /H           Copies hidden and system files also.
  /E           Copies directories and subdirectories, including empty ones.
               Same as /S /E. May be used to modify /T.
  /T           Creates directory structure, but does not copy files. Does not
               include empty directories or subdirectories. /T /E includes
  /I           If destination does not exist and copying more than one file,
               assumes that destination must be a directory.
  /Y           Suppresses prompting to confirm you want to overwrite an
               existing destination file.

`To see all the commands type`xcopy /? in cmd

Appeler un autre fichier batch avec l'option sync.bat myprogram.ini.

Je ne suis pas sûr de ce que vous voulez dire par là, mais si vous voulez simplement ouvrir ces deux fichiers, il suffit de mettre le chemin du fichier comme suit

Path/sync.bat
Path/myprogram.ini

Si c'était dans l'environnement Bash c'était facile pour moi, mais je ne sais pas mais je ne sais pas comment tester si un fichier ou un dossier existe et si c'est un fichier ou un dossier. dossier.

Vous utilisez un fichier batch. Vous avez mentionné plus tôt que vous devez créer un fichier .bat pour l'utiliser :

Je dois créer un fichier .BAT pour faire cela :

12voto

Patrick Points 12750

Tapez IF / ? pour obtenir de l'aide sur if, il explique clairement comment utiliser IF EXIST.

Pour supprimer une arborescence complète à l'exception de certains dossiers, voir la réponse à cette question : Windows batch script pour supprimer tout dans un dossier sauf un

Enfin, copier signifie simplement appeler COPY et appeler un autre fichier bat peut être fait comme ceci :

MYOTHERBATFILE.BAT sync.bat myprogram.ini

-2voto

RichieHD Points 1

@echo off si existe " C:\Program Fichiers \Rainmeter\Rainmeter.exe " ( msg * Rainmeter se encuentra en este ordenador. CD C:\Program Fichiers \Rainmeter démarrer Rainmeter.exe exit ) else ( msg * Rainmeter no se encuentra en este ordenador. )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X