Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов

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

Аватара для DimmKo

Пользователь


Сообщения: 65
Благодарности: 1


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


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

Задача: проверить наличие файла test1:
1) если файл есть, то ничего не делать. Выход.

2) если файла нет, то:
2.1) проверить наличие процесса proc1: Если есть - завершить, если нет - ничего не делать.
2.2) проверить наличие процесса proc2: Если есть - завершить, если нет - ничего не делать.
2.3) скопировать test1.a --> test1, запустить proc1 (тот сам запустит proc2, потому этого достаточно).

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

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

Спасибо.

Отправлено: 09:34, 03-05-2018

 

Ветеран


Contributor


Сообщения: 26290
Благодарности: 7645

Профиль | Отправить PM | Цитировать


Цитата DimmKo:
проверить наличие файла test1 »
Проверить наличие файла где?

Цитата DimmKo:
скопировать test1.a --> test1 »
А если нет test1.a?

Цитата DimmKo:
запустить proc1 »
Откуда запустить?

Отправлено: 10:58, 03-05-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для DimmKo

Пользователь


Сообщения: 65
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Спасибо за ваш ответ.
Уточняю.

Цитата Iska:
Проверить наличие файла где? »
в том же самом каталоге, где будет скрипт
для удобства и т.п., допустим, все лежит в D:\script1

Цитата Iska:
А если нет test1.a? »
лучше тогда, конечно, что-то типа touch test1

Цитата Iska:
Откуда запустить? »
всё в пределах одного каталога.
Если можно использовать глобальные переменные, то тогда там можно пути прописать.

Последний раз редактировалось DimmKo, 03-05-2018 в 12:02. Причина: уточнение пути


Отправлено: 12:01, 03-05-2018 | #3


Ветеран


Contributor


Сообщения: 26290
Благодарности: 7645

Профиль | Отправить PM | Цитировать


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

Цитата DimmKo:
Если можно использовать глобальные переменные, то тогда там можно пути прописать. »
Переменные окружения не бывают «глобальными».

Отправлено: 12:19, 03-05-2018 | #4


Аватара для DimmKo

Пользователь


Сообщения: 65
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Цитата Iska:
Переведите, пожалуйста, на русский. Хотелось бы услышать ответ на вопрос: что делать, если файл test1.a не существует? »
попробую.
Предлагаю немного логику поменять. Убрать
скопировать test1.a --> test1

и
создать test1

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

Отправлено: 12:51, 03-05-2018 | #5


Аватара для Elven

Ветеран


Сообщения: 874
Благодарности: 222

Профиль | Сайт | Отправить PM | Цитировать


Упущен вариант с наличием НЕСКОЛЬКИХ одноименных процессов. Пока рыбы набросал...
Код: Выделить весь код
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 нужен весьма редко, если есть нужность именно создать файл и более ничего. Уже и вспомнить не могу, когда мне это нужно было последний раз.

Отправлено: 12:59, 03-05-2018 | #6


Ветеран


Contributor


Сообщения: 26290
Благодарности: 7645

Профиль | Отправить PM | Цитировать


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 расставляйте сами.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:14, 03-05-2018 | #7


Аватара для DimmKo

Пользователь


Сообщения: 65
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


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

Цитата Elven:
НЕСКОЛЬКИХ одноименных процессов »
подразумевается, что имя процессора уникальное и как будто бы нельзя 2 раза запустить. Я на деле не проверял, но может на тестовый закину и попробую.

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

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

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


Цитата Iska:
вообще-то touch делает немного другое. Ну, да ладно. »
а именно изменяет время файла, но если тот существует. Если же файла нет - просто создает его.

Спасибо за помощь.
Сейчас проверю.

Отправлено: 13:15, 03-05-2018 | #8


Аватара для DimmKo

Пользователь


Сообщения: 65
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


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

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

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

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

Спасибо.

Отправлено: 14:39, 11-05-2018 | #9


Ветеран


Contributor


Сообщения: 26290
Благодарности: 7645

Профиль | Отправить PM | Цитировать


Цитата DimmKo:
Скажите, пожалуйста, можно ли добавить сюда логирование? Ну что бы он в текстовый документ писал что он делает? »
Можно. А что, собственно, писать-то — весь код из четырёх строчек?!

Цитата DimmKo:
И еще, могу ли я использовать данный скрипт (со ссылкой на эту тему и на вас, как автора) в написании заметки? »
Можете. Используйте, кто ж мешает.

Отправлено: 14:50, 11-05-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Помощь со скриптом - проверка наличия файла и процессов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - проверка наличия файла в директории icetanker Скриптовые языки администрирования Windows 11 19-10-2014 21:37
VBS/WSH/JS - Проверка наличия файла в папке в случае отсутствия перезагружать компьютер NickCom Программирование и базы данных 4 19-08-2013 05:13
CMD/BAT - [решено] автоматическая проверка наличия файла и его шифрование DorianWolf Скриптовые языки администрирования Windows 2 10-12-2012 17:31
Любой язык - [решено] Проверка наличия файла на веб-сервере Vadikan Скриптовые языки администрирования Windows 5 20-05-2011 01:22
CMD/BAT - [решено] Определение атрибута файла & проверка наличия процесса user_123 Скриптовые языки администрирования Windows 10 19-11-2010 16:15




 
Переход