Wie überprüfe ich, ob eine Datei in einer Batchdatei vorhanden ist?

185

Ich muss eine .BATDatei erstellen , die dies tut:

  1. Wenn C:\myprogram\sync\data.handlervorhanden, beenden Sie;
  2. Wenn C:\myprogram\html\data.sqlnicht vorhanden, beenden Sie;
  3. Beim C:\myprogram\sync\Löschen aller Dateien und Ordner außer ( test, test3und test2)
  4. Kopieren C:\myprogram\html\data.sqlnachC:\myprogram\sync\
  5. Rufen Sie eine andere Batch-Datei mit Option auf sync.bat myprogram.ini.

Wenn es in der Bash-Umgebung war, war es für mich einfach, aber ich weiß nicht, wie ich testen soll, ob eine Datei oder ein Ordner vorhanden ist und ob es sich um eine Datei oder einen Ordner handelt.

cusspvz
quelle

Antworten:

288

Mit IF EXIST können Sie nach einer Datei suchen:

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

Wenn Sie kein "else" benötigen, können Sie Folgendes tun:

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=

Hier ist ein funktionierendes Beispiel für die Suche nach einer Datei oder einem Ordner:

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
)
stuartd
quelle
1
Wie prüft man den vollständigen Pfad mit dem Dateinamen? Bonuspunkte, wenn der Pfad Leerzeichen enthält. Wie OP sagte, einfach in BASH.
Nick
2
@ Nick: Einfach cmdauch - bitte stellen Sie eine andere Frage - sie kosten nicht viel. Das Hinzufügen eines weiteren Fragekommentars zu einem Kommentar, der älter als 3 Jahre ist, führt wahrscheinlich nicht zu vielen Antworten (überprüfen Sie jedoch zuerst SO, um Antworten auf diese genaue Frage zu erhalten. Andernfalls wird Ihre neue Frage als Duplikat markiert ...).
Magoo
8
Nur etwas aus der IF /?Hilfedatei zu beachten : The ELSE clause must occur on the same line as the command after the IF.Das hat mich verbrannt. hoffe es hilft dir
Funkymushroom
1
Erinnerung: IF, EXIST, ELSE, REM, DEL usw. funktionieren auch in Kleinbuchstaben!
Terra Ashley
1
Verwenden Sie, um zu überprüfen, ob keine Datei vorhanden ist If Not Exist "%FilePath% ( command ). Beachten Sie, dass Fledermaus Klammern (anstelle von geschweiften Klammern verwendet{
transang
11

Typ IF /? Um Hilfe zu erhalten, wird klar erläutert, wie IF EXIST verwendet wird.

Informationen zum Löschen eines vollständigen Baums mit Ausnahme einiger Ordner finden Sie in der Antwort auf diese Frage: Windows-Batch-Skript zum Löschen aller Elemente in einem Ordner mit Ausnahme eines Ordners

Schließlich bedeutet Kopieren nur, dass Sie COPY aufrufen und eine andere Bat-Datei aufrufen können:

MYOTHERBATFILE.BAT sync.bat myprogram.ini
Patrick
quelle
10

Hier ist ein gutes Beispiel, wie ein Befehl ausgeführt wird, wenn eine Datei vorhanden ist oder nicht:

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

Wir werden diese drei Dateien nehmen und an einem vorübergehenden Ort ablegen. Nach dem Löschen des Ordners werden diese drei Dateien wiederhergestellt.

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

Verwenden Sie den Befehl XCOPY :

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

Ich werde erklären, was das /c /d /h /e /i /ybedeutet:

  /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

Rufen Sie eine andere Batch-Datei mit der Option sync.bat myprogram.ini auf.

Ich bin nicht sicher, was Sie damit meinen, aber wenn Sie nur beide Dateien öffnen möchten, geben Sie einfach den Pfad der Datei wie folgt ein

Path/sync.bat
Path/myprogram.ini

Wenn es in der Bash-Umgebung war, war es für mich einfach, aber ich weiß nicht, wie ich testen soll, ob eine Datei oder ein Ordner vorhanden ist und ob es sich um eine Datei oder einen Ordner handelt.

Sie verwenden eine Batchdatei. Sie haben bereits erwähnt, dass Sie eine .bat-Datei erstellen müssen, um dies zu verwenden:

Ich muss eine .BAT-Datei erstellen, die dies tut:

Avrumi Sherman
quelle
Was hat mit dieser Antwort geklingelt?
Avrumi Sherman