Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] если файл существует, выполнить (http://forum.oszone.net/showthread.php?t=335548)

Alexander_88 01-07-2018 11:43 2820171

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

Код:

if exist = "new.txt" pause
вроде выполняет паузу, если находит файл.. но как добавить еще одну команду.. ?например

Код:

if exist = "new.txt" pause, del *.txt

Alexander_88 01-07-2018 12:40 2820176

Нашел, через &

только вот если использовать две команды, удаление и копирование.. показывается отчет только последнего действия..
"Скопировано 1 файл"
Нельзя ли сделать, отчет для всех действий?

Iska 01-07-2018 13:07 2820181

Цитата:

Цитата Alexander_88
как можно проверить существует ли файл, если да, то выполнить не одну, а несколько команд »

Код:

if exist "bla-bla-bla.txt" (
    echo bla-bla-bla1
    echo bla-bla-bla2
    echo bla-bla-bla3
)

Цитата:

Цитата Alexander_88
например
Код:

if exist = "new.txt" pause, del *.txt
»

Код:

if exist "new.txt" (
    pause
    del *.txt
)

Цитата:

Цитата Alexander_88
Нашел, через & »

Необязательно «через &». Это, скорее, исключение, нежели типичное использование.

Цитата:

Цитата Alexander_88
только вот если использовать две команды, удаление и копирование.. показывается отчет только последнего действия.. »

Это совсем не так. По умолчанию команда del не отображает имена удалённых файлов. Читайте:
Код:

del /?
о том, как изменить данное поведение.

megaloman 01-07-2018 13:10 2820182

Alexander_88,
Я бы предложил так:
Код:

@Echo Off

If Exist "new.txt" (
        Echo File Exist
        Del *.txt
        Pause
)
rem остальной код

То есть, вы можете нарисовать сколько угодно строк. Но при этом надо помнить, что при присваивании переменным значений (Set что-то=чему-то) будет проблема с раскрытием этих значений
Я бы предпочел с точки зрения читаемости кода и свободы работы с переменными оформить процедуру, например вот так
Код:

@Echo Off

If Exist "new.txt" Call :FExist "*.txt"

rem остальной код

GoTo :Eof

:FExist
        Echo File Exist
        Del %1
        Pause
GoTo :Eof

Опять же, естественно в процедуре можете нарисовать нужное количество строк кода

Alexander_88 01-07-2018 13:35 2820185

спасибо.. вроде заработало :)

mwz 01-07-2018 13:54 2820189

Alexander_88, ну и можно действовать "от противного", что в ряде случаев облегчает задачу:
Код:

if NOT exist "<Drive>:\<Path>\new.txt" GoTo :SkipCode
        Echo File Exist
        Del *.txt
        Pause
(и т.д.)
:SkipCode
(и далее — продолжение батника)

Во избежание "неожиданных" осложнений с исполнением батника имеет смысл указывать не просто имя файла, а имя с полным путём, как в примере (либо применять любые другие варианты типа pushd, чтобы оказаться именно в каталоге файла new.txt).


Время: 23:08.

Время: 23:08.
© OSzone.net 2001-