CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов

Аватара пользователя
DimmKo

CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов

Сообщение DimmKo »

Товарищи, помогите, пожалуйста, написать скрипт для Windows XP.



Задача: проверить наличие файла test1:

1) если файл есть, то ничего не делать. Выход.



2) если файла нет, то:

2.1) проверить наличие процесса proc1: Если есть - завершить, если нет - ничего не делать.

2.2) проверить наличие процесса proc2: Если есть - завершить, если нет - ничего не делать.

2.3) скопировать test1.a --> test1, запустить proc1 (тот сам запустит proc2, потому этого достаточно).



Я, к сожалению, в скриптах не силен. В Linux простые скрипты мне даются, а в Windows пока никак.



Буду благодарен за помощь.



Спасибо.
Аватара пользователя
DimmKo

Re: CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов

Сообщение DimmKo »

Спасибо за ваш ответ.

Уточняю.



Цитата Iska:

Проверить наличие файла где?
CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов


в том же самом каталоге, где будет скрипт

для удобства и т.п., допустим, все лежит в D:\script1



Цитата Iska:

А если нет test1.a?
CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов


лучше тогда, конечно, что-то типа touch test1



Цитата Iska:

Откуда запустить?
CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов


всё в пределах одного каталога.

Если можно использовать глобальные переменные, то тогда там можно пути прописать.
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов

Сообщение Iska »

Цитата DimmKo:



лучше тогда, конечно, что-то типа touch test1
CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов




Переведите, пожалуйста, на русский. Хотелось бы услышать ответ на вопрос: что делать, если файл test1.a не существует?




Цитата DimmKo:



Если можно использовать глобальные переменные, то тогда там можно пути прописать.
CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов




Переменные окружения не бывают «глобальными».
Аватара пользователя
DimmKo

Re: CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов

Сообщение DimmKo »

Цитата Iska:



Переведите, пожалуйста, на русский. Хотелось бы услышать ответ на вопрос: что делать, если файл test1.a не существует?
CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов




попробую.

Предлагаю немного логику поменять. Убрать

скопировать test1.a --> test1



и

создать test1



Т.е. если файла test1 не существует, то создадим его. Как есть, без расширений и т.п.

в Linux это делает команда touch, как в Windows не знаю.
Аватара пользователя
Elven

Re: CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов

Сообщение Elven »

Упущен вариант с наличием НЕСКОЛЬКИХ одноименных процессов. Пока рыбы набросал...



Код:

Код: Выделить всё

if not exist test1 (
	for /f "tokens=2" %%i in ('tasklist ^| findstr ^"proc1.exe proc2.exe^"') do (
		taskkill /PID %%i /F
	)
	if exist test1.a (
		copy test1.a test1
		start proc1.exe
	) ELSE (
		type NUL > test1
		start proc1.exe
	)
)

DimmKo, в линях файл создать можно не только touch, собственно touch нужен весьма редко, если есть нужность именно создать файл и более ничего. Уже и вспомнить не могу, когда мне это нужно было последний раз.
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов

Сообщение Iska »

DimmKo, вообще-то touch делает немного другое. Ну, да ладно.



Код:

Код: Выделить всё

@echo off
setlocal enableextensions enabledelayedexpansion
if not exist "%~dp0test1" (
	>nul 2>&1 taskkill.exe /im "proc1" /im "proc2"
	>nul copy nul "%~dp0test1"
	start "" "%~dp0proc1"
)
endlocal
exit /b 0

Реальные имена вместо test1, proc1, proc2 расставляйте сами.
Аватара пользователя
DimmKo

Re: CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов

Сообщение DimmKo »

Elven, спасибо большое... сейчас попробую на тестовой машине проверить.




Цитата Elven:



НЕСКОЛЬКИХ одноименных процессов
CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов




подразумевается, что имя процессора уникальное и как будто бы нельзя 2 раза запустить. Я на деле не проверял, но может на тестовый закину и попробую.



Мне сейчас хотя бы понимать, что файл есть или нет, и от этого уже думать.





Скрытый текст

[spoiler]Конечно, у меня вощникла мысль, расшарить каталог, подцепить его в linux, и там сделать проверку наличия файла. Но хотелось бы штатными средствами это решить.[/spoiler]







Цитата Iska:



вообще-то touch делает немного другое. Ну, да ладно.
CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов




а именно изменяет время файла, но если тот существует. Если же файла нет - просто создает его.



Спасибо за помощь.

Сейчас проверю.
Аватара пользователя
DimmKo

Re: CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов

Сообщение DimmKo »

Iska, огромное спасибо за Вашу работу (скрипт).



Поставил в планировщик - всё супер.



Скажите, пожалуйста, можно ли добавить сюда логирование? Ну что бы он в текстовый документ писал что он делает?



И еще, могу ли я использовать данный скрипт (со ссылкой на эту тему и на вас, как автора) в написании заметки?



Спасибо.
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов

Сообщение Iska »

Цитата DimmKo:



Скажите, пожалуйста, можно ли добавить сюда логирование? Ну что бы он в текстовый документ писал что он делает?
CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов




Можно. А что, собственно, писать-то — весь код из четырёх строчек?!




Цитата DimmKo:



И еще, могу ли я использовать данный скрипт (со ссылкой на эту тему и на вас, как автора) в написании заметки?
CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов




Можете. Используйте, кто ж мешает.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»