web-dev-qa-db-fra.com

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

Je dois créer un fichier .BAT qui fait ceci:

  1. Si C:\myprogram\sync\data.handler existe, quitte;
  2. Si C:\myprogram\html\data.sql n'existe pas, quitte;
  3. Dans C:\myprogram\sync\ supprimez tous les fichiers et dossiers sauf (test, test3 et test2).
  4. Copier C:\myprogram\html\data.sql dans C:\myprogram\sync\
  5. Appelez un autre fichier de commandes 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 vérifier si un fichier ou un dossier existe et s'il s'agit d'un fichier ou d'un dossier.

170
cusspvz

Vous pouvez utiliser IF EXIST pour rechercher un fichier:

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

Si vous n'avez pas besoin d'un "else", 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 pratique 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
)
260
stuartd

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

Pour supprimer une arborescence complète à l'exception de certains dossiers, reportez-vous à la réponse à cette question: script de lot Windows pour supprimer tout ce qui se trouve 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
11
Patrick

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

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 dossiers et les mettre dans un endroit temporaire. Après la suppression du dossier, ces trois fichiers seront restaurés.

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

Utilisez la commande XCOPY :

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

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

  /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

Appelez un autre fichier de commandes avec l'option sync.bat myprogram.ini.

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

Path/sync.bat
Path/myprogram.ini

Si c'était dans l'environnement Bash, c'était facile pour moi, mais je ne sais pas comment vérifier si un fichier ou un dossier existe et s'il s'agit d'un fichier ou d'un dossier.

Vous utilisez un fichier de commandes. Vous avez mentionné précédemment que vous devez créer un fichier .bat pour utiliser ceci:

Je dois créer un fichier .bat qui fait ceci:

10
Avrumi Sherman