Come verificare se esiste un file in un file batch?


186

Devo creare un .BATfile che faccia questo:

  1. Se C:\myprogram\sync\data.handleresiste, esci;
  2. Se C:\myprogram\html\data.sqlnon esiste, esci;
  3. In C:\myprogram\sync\elimina tutti i file e le cartelle tranne ( test, test3e test2)
  4. Copia C:\myprogram\html\data.sqlinC:\myprogram\sync\
  5. Chiama altri file batch con l'opzione sync.bat myprogram.ini.

Se era nell'ambiente Bash per me era facile, ma non so come verificare se esiste un file o una cartella e se si tratta di un file o una cartella.

Risposte:


289

È possibile utilizzare IF EXIST per verificare la presenza di un file:

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

Se non hai bisogno di un "altro", puoi fare qualcosa del genere:

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=

Ecco un esempio funzionante di ricerca di un file o una cartella:

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
Come si controlla il percorso completo con il nome file? Punti bonus se il percorso contiene spazi. Come ha detto OP, semplice in BASH.
Nick,

2
@Nick: anche semplice cmd- per favore, fai una domanda diversa - non costano molto. L'aggiunta di un ulteriore commento a una domanda che ha più di 3 anni non è in grado di raccogliere molte risposte (ma controlla prima SO per le risposte a questa domanda precisa, altrimenti otterrai la tua nuova domanda contrassegnata come duplicata ...)
Magoo,

8
Solo qualcosa da notare dal IF /?file di aiuto: The ELSE clause must occur on the same line as the command after the IF.questo mi ha bruciato. spero che ti aiuti.
funkymushroom,

1
Promemoria: IF, EXIST, ELSE, REM, DEL, ecc. Funzionano tutti anche in minuscolo!
Terra Ashley,

1
per verificare se il file non esiste, utilizzare If Not Exist "%FilePath% ( command ). Nota che il pipistrello usa le parentesi graffe (anziché le parentesi graffe{
Transang

11

Digitare IF /? per chiedere aiuto se, spiega chiaramente come utilizzare IF EXIST.

Per eliminare un albero completo ad eccezione di alcune cartelle, vedere la risposta a questa domanda: script batch di Windows per eliminare tutto in una cartella tranne una

Infine, copiare significa semplicemente chiamare COPIA e chiamare un altro file bat può essere fatto in questo modo:

MYOTHERBATFILE.BAT sync.bat myprogram.ini

10

Ecco un buon esempio su come eseguire un comando se un file esiste o non esiste:

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

Prenderemo questi tre file e li metteremo in un posto temporaneo. Dopo aver eliminato la cartella, ripristinerà quei tre file.

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

Utilizzare il comando XCOPY :

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

Spiegherò cosa /c /d /h /e /i /ysignifica:

  /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

Chiama altri file batch con l'opzione sync.bat myprogram.ini.

Non sono sicuro di cosa tu voglia dire con questo, ma se vuoi solo aprire entrambi questi file inserisci semplicemente il percorso del file come

Path/sync.bat
Path/myprogram.ini

Se era nell'ambiente Bash per me era facile, ma non so come verificare se esiste un file o una cartella e se si tratta di un file o una cartella.

Stai utilizzando un file batch. Hai menzionato prima devi creare un file .bat per usare questo:

Devo creare un file .BAT che faccia questo:


Qual è il gradino con questa risposta?
Avrumi Sherman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.