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

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

roccat_34 07-05-2018 13:03 2812430

не срабатывает IF
 
я написал батник который при наличии процесса убивает его и дальше работает.
просто через /taskill всё убивается спокойно, но когда делаю его через If то процесс не убивается и соответственно не до конца исполняется батник.
за день до этого всё работало спокойно и убивалось
Сам код: @echo off
echo updater running
If EXIST \client.exe (taskkill /f /im client.exe) ELSE (echo vse norm)
replace
replace
start client.exe

Iska 07-05-2018 14:34 2812455

roccat_34, где находится client.exe? Здесь:
Цитата:

Цитата roccat_34
If EXIST \client.exe »

Вы проверяете наличие client.exe в корневом каталоге текущего диска. Здесь:
Цитата:

Цитата roccat_34
start client.exe »

Вы пытаетесь запустить client.exe из текущего каталога, из PATH или из AppPaths.

Чего Вы пытаетесь достичь, дважды исполняя replace без указания аргументов?

Для начала опишите словами, какую задачу Вы пытаетесь решить.

roccat_34 07-05-2018 14:45 2812462

я пытаюсь достичь чтобы через if taskill срабатывал. то есть в идеале она проверяет наличие запущенного клиента и если есть то убивает его и потом заменяет нужные файлы. в команде старт всё нормально там полный путь указан start C:\\Folder\client.exe
аргументы в replace тоже в порядке там просто путь с шары на локальную машину просто описан. батник берет два файла с папки в шаре и заменяет на машине
просто хочу понять почему просто taskill срабатывает а с ифом нет

Iska 07-05-2018 16:14 2812476

roccat_34, покажите полный и точный код Вашего пакетного файла.

roccat_34 07-05-2018 16:22 2812477

@echo off
if exesits /client.exe (taskkill /f /im client.exe) ELSE(echo test)
replace \\192.168.0.1\Archives\1\folder\client.exe C:\AstCommon
replace \\192.168.0.1\Archives\1\folder\client.ini C:\AstCommon
start C:\folder\client.exe

Iska 07-05-2018 16:49 2812480

roccat_34, что за «exesits»? Вы можете просто скопировать и вставить код? Вопросов стало ещё больше. Не знаю, есть ли смысл их задавать.

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sPath=c:\AstCommon
set sFile=client.exe

if exist "%sPath%\%sFile%" (
        >nul 2>&1 taskkill.exe /f /im "%sFile%"
        replace.exe "\\192.168.0.1\Archives\1\folder\%sFile%"          "%sPath%"
        replace.exe "\\192.168.0.1\Archives\1\folder\%sFile:~0,-4%.ini" "%sPath%"
        start "" "%sPath%\%sFile%"
) else (
        echo Can't find client [%sFile%] in folder [%sPath%].
        exit /b 1
)

endlocal
exit /b 0


alpap 07-05-2018 16:56 2812483

roccat_34,
вы не нервничайте и не спешите
откройте ваш bat, выделите все, скопируйте, потом здесь на сайте в окне найдите теги # , нажмите и вставьте скопированное между ними

если примерно так и сделали, то у вас 3 ошибки в коде
1. exesits , надо exist
2. /client.exe , надо \client.exe
3. ELSE(echo test) , надо ELSE (echo test)

roccat_34 07-05-2018 17:36 2812492

@echo off
if EXIST \client.exe (taskkill /f /im client.exe) ELSE (echo test)
replace \\192.168.0.1\Archives\1\AstCommon\client.exe C:\AstCommon
replace \\192.168.0.1\Archives\1\AstCommon\client.ini C:\AstCommon
start C:\AstCommon\client.exe
поправил всё равно не срабатывает taskkill с if-ом

mwz 07-05-2018 22:04 2812520

Цитата:

Цитата roccat_34
if EXIST \client.exe (taskkill /f /im client.exe) ELSE (echo test »

1. Как уже сказали, вы проверяете наличие файла client.exe в корне текущего (то есть в общем случае — неопределённого) диска. Файл этот у вас там есть?

Поскольку дальше следует, что он должен быть не в корне диска, а в каталоге C:\AstCommon\ — а ведь если файла в корне активного диска нет, то первая строка никогда не будет обращаться к taskkill, a всегда будет завершаться эхом test.

2. Наличие файла не означает, что этот файл запущен и что его процесс надо убивать. Т.е. надо проверять не наличие файла, а активность его процесса.

3. Вам исполнять строки начиная со второй надо при любом исходе проверки по первой строке? Сейчас у вас именно так.

roccat_34 07-05-2018 22:08 2812522

Цитата:

Цитата mwz (Сообщение 2812520)
Цитата:

Цитата roccat_34
if EXIST \client.exe (taskkill /f /im client.exe) ELSE (echo test »

1. Как уже сказали, вы проверяете наличие файла client.exe в корне текущего (то есть в общем случае — неопределённого) диска. Файл этот у вас там есть?

Поскольку дальше следует, что он должен быть не в корне диска, а в каталоге C:\AstCommon\ — а ведь если файла в корне активного диска нет, то первая строка никогда не будет обращаться к taskkill, a всегда будет завершаться эхом test.

2. Наличие файла не означает, что этот файл запущен и что его процесс надо убивать. Т.е. надо проверять не наличие файла, а активность его процесса.

3. Вам исполнять строки начиная со второй надо при любом исходе проверки по первой строке? Сейчас у вас именно так.

Хорошо, как тогда проверять наличие процесса? мне нужно чтобы батник именно либо убивал процесс и потом заменял либо выводил что процесс не запущен и заменял файлы

mwz 07-05-2018 22:36 2812526

roccat_34, посмотрите хотя бы http://forum.oszone.net/post-1122855.html и http://www.cyberforum.ru/cmd-bat/thread1914738.html (найдено Яндексом за 30 секунд запросом "как проверить из командного файла наличие процесса в памяти").

Iska 08-05-2018 01:17 2812538

Цитата:

Цитата roccat_34
Хорошо, как тогда проверять наличие процесса? мне нужно чтобы батник именно либо убивал процесс и потом заменял либо выводил что процесс не запущен и заменял файлы »

Интересно, для кого я код писал — для Пушкина?!

roccat_34 08-05-2018 09:37 2812563

Цитата:

Цитата Iska
Интересно, для кого я код писал — для Пушкина?! »

прошу прощения пропустил немного, скрипт заработал, спасибо


Время: 13:15.

Время: 13:15.
© OSzone.net 2001-