Показать полную графическую версию : [решено] не срабатывает IF
roccat_34
07-05-2018, 13:03
я написал батник который при наличии процесса убивает его и дальше работает.
просто через /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
roccat_34, где находится client.exe? Здесь:
If EXIST \client.exe »
Вы проверяете наличие client.exe в корневом каталоге текущего диска. Здесь:
start client.exe »
Вы пытаетесь запустить client.exe из текущего каталога, из PATH или из AppPaths.
Чего Вы пытаетесь достичь, дважды исполняя replace без указания аргументов?
Для начала опишите словами, какую задачу Вы пытаетесь решить.
roccat_34
07-05-2018, 14:45
я пытаюсь достичь чтобы через if taskill срабатывал. то есть в идеале она проверяет наличие запущенного клиента и если есть то убивает его и потом заменяет нужные файлы. в команде старт всё нормально там полный путь указан start C:\\Folder\client.exe
аргументы в replace тоже в порядке там просто путь с шары на локальную машину просто описан. батник берет два файла с папки в шаре и заменяет на машине
просто хочу понять почему просто taskill срабатывает а с ифом нет
roccat_34, покажите полный и точный код Вашего пакетного файла.
roccat_34
07-05-2018, 16:22
@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
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
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
@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-ом
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
if EXIST \client.exe (taskkill /f /im client.exe) ELSE (echo test »
1. Как уже сказали, вы проверяете наличие файла client.exe в корне текущего (то есть в общем случае — неопределённого) диска. Файл этот у вас там есть?
Поскольку дальше следует, что он должен быть не в корне диска, а в каталоге C:\AstCommon\ — а ведь если файла в корне активного диска нет, то первая строка никогда не будет обращаться к taskkill, a всегда будет завершаться эхом test.
2. Наличие файла не означает, что этот файл запущен и что его процесс надо убивать. Т.е. надо проверять не наличие файла, а активность его процесса.
3. Вам исполнять строки начиная со второй надо при любом исходе проверки по первой строке? Сейчас у вас именно так.
Хорошо, как тогда проверять наличие процесса? мне нужно чтобы батник именно либо убивал процесс и потом заменял либо выводил что процесс не запущен и заменял файлы
roccat_34, посмотрите хотя бы http://forum.oszone.net/post-1122855.html и http://www.cyberforum.ru/cmd-bat/thread1914738.html (найдено Яндексом за 30 секунд запросом "как проверить из командного файла наличие процесса в памяти").
Хорошо, как тогда проверять наличие процесса? мне нужно чтобы батник именно либо убивал процесс и потом заменял либо выводил что процесс не запущен и заменял файлы »
Интересно, для кого я код писал (http://forum.oszone.net/post-2812480.html#post2812480) — для Пушкина?!
roccat_34
08-05-2018, 09:37
Интересно, для кого я код писал — для Пушкина?! »
прошу прощения пропустил немного, скрипт заработал, спасибо
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.