Как проверить, существует ли файл в командном файле?

186

Я должен создать .BATфайл, который делает это:

  1. Если C:\myprogram\sync\data.handlerсуществует, выход;
  2. Если C:\myprogram\html\data.sqlне существует, выход;
  3. В C:\myprogram\sync\удалить все файлы и папки, кроме ( test, test3и test2)
  4. Копировать C:\myprogram\html\data.sqlвC:\myprogram\sync\
  5. Вызовите другой пакетный файл с опцией sync.bat myprogram.ini.

Если бы это было в среде Bash, это было бы легко для меня, но я не знаю, как проверить, существует ли файл или папка и является ли он файлом или папкой.

cusspvz
источник

Ответы:

289

Вы можете использовать IF EXIST для проверки файла:

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

Если вам не нужно «другое», вы можете сделать что-то вроде этого:

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=

Вот рабочий пример поиска файла или папки:

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
источник
1
Как проверить полный путь с именем файла? Бонусные баллы, если путь содержит пробелы. Как сказал OP, просто в BASH.
Ник
2
@ Ник: Просто cmdтоже - пожалуйста, задайте другой вопрос - они не стоят дорого. Добавление дополнительного комментария к вопросу, которому более 3 лет, вряд ли получит много ответов (но сначала проверьте SO на наличие ответов на этот точный вопрос, иначе вы получите новый вопрос, помеченный как дубликат ...)
Магу
8
Просто кое-что отметить из IF /?справочного файла: The ELSE clause must occur on the same line as the command after the IF.это обожгло меня. надеюсь, это поможет вам.
funkymushroom
1
Напоминание: IF, EXIST, ELSE, REM, DEL и т. Д. Также работают в нижнем регистре!
Терра Эшли
1
чтобы проверить, не существует ли файл, используйте If Not Exist "%FilePath% ( command ). Обратите внимание, что летучая мышь использует фигурные скобки (вместо фигурных скобок{
трансанг
11

Тип IF /? чтобы получить справку о том, если, он четко объясняет, как использовать IF EXIST.

Чтобы удалить полное дерево, кроме некоторых папок, см. Ответ на этот вопрос: Пакетный скрипт Windows для удаления всего в папке, кроме одной

Наконец, копирование означает, что вызов COPY и вызов другого bat-файла могут быть выполнены следующим образом:

MYOTHERBATFILE.BAT sync.bat myprogram.ini
Патрик
источник
10

Вот хороший пример того, как выполнить команду, если файл существует или не существует:

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

Мы возьмем эти три файла и поместим их во временное место. После удаления папки будут восстановлены эти три файла.

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

Используйте команду XCOPY :

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

Я объясню, что /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

Вызовите другой пакетный файл с опцией sync.bat myprogram.ini.

Я не уверен, что вы подразумеваете под этим, но если вы просто хотите открыть оба этих файла, вы просто укажите путь к файлу, как

Path/sync.bat
Path/myprogram.ini

Если бы это было в среде Bash, это было бы легко для меня, но я не знаю, как проверить, существует ли файл или папка и является ли он файлом или папкой.

Вы используете командный файл. Вы упомянули ранее, вы должны создать файл .bat, чтобы использовать это:

Я должен создать файл .BAT, который делает это:

Авруми Шерман
источник
Что Rung с этим ответом?
Авруми Шерман