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

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

Ответить
Настройки темы
CMD/BAT - [решено] Если файл существует, то - ___, если не существует, то___

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


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

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


Здравствуйте. Помогите пожалуйста найти ошибку в скрипте.

IF EXIST "C:\ps1\ok.txt" goto :eof ELSE (schtasks /Create /SC OnLogon /RU "system" /TN "ExcelWinwordStop-CopyAmtlib-ActivateKMS-ONSTART" /RL HIGHEST /DELAY 0000:30 /TR c:\ps1\StopExcelCopyAtmlibStartKMS-ONSTART.vbs ) & nul>ok.txt
pause

Смысл скрипта. Если в указанной дирректории нет файла, то в планировщике создается задача а вместе с ней и файл в дирректории, если файл существует, то скрипт прерывается.
Очень прошу помощи. Много читал про оператор IF, но недосягаемо для моего понимания похоже...

Спасибо!

Отправлено: 13:05, 24-03-2021

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


Сама по себе команда в скобках нормально отрабатывает?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 13:37, 24-03-2021 | #2



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

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


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


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

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


Да, команда отрабатывает, задание в планировщике создается с необходимыми параметрами

IF EXIST "C:\ps1\ok.txt" goto :eof - это в отдельности тоже отрабатывает нормально

nul>C:\ps1\ok.txt - тоже в отдельности отрабатывает нормально

Не могу все это связать в пакетный файл.

Был вариант такой проверки: IF EXIST C:\Windows\System32\Tasks\ONSTART goto :eof ELSE schtasks /Create /SC OnLogon /RU "system" /TN "ONSTART" /RL HIGHEST /DELAY 0000:30 /TR c:\ps1\ONSTART.vbs

но ничего не получилось, т.к. у файлов в папке TASKS нет расширения...

Отправлено: 14:12, 24-03-2021 | #3


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


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

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


Проблему получилось решить таким образом. Похожий скрипт нашел на форуме и изменил. Вроде, работает. На мой взгляд все как-то громоздко и проверка не должна быть привязана к существованию файлов в дирректории, а должна быть привязана к существованию задания в планировщике...

@echo off
SET SNMP=C:\ps1\ok.txt
IF EXIST "%SNMP%" CALL :St
IF NOT EXIST "%SNMP%" GOTO :Inst

:Inst
(schtasks /Create /SC OnLogon /RU "system" /TN "ONSTART" /RL HIGHEST /DELAY 0000:30 /TR c:\ps1\ONSTART.vbs) & (nul>C:\ps1\ok.txt)
GOTO: EOF

:St
chcp 1251
ECHO Zapusk skripta %DATE% - %TIME% >> C:\ps1\suschestvuet.txt
GOTO :EOF
pause

Отправлено: 15:52, 24-03-2021 | #4


Ветеран


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

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


а так?
Код: Выделить весь код
IF not exist "C:\ps1\ok.txt" (schtasks /Create /SC OnLogon /RU "system" /TN "ExcelWinwordStop-CopyAmtlib-ActivateKMS-ONSTART" /RL HIGHEST /DELAY 0000:30 /TR "C:\ps1\StopExcelCopyAtmlibStartKMS-ONSTART.vbs"& rem:>"C:\ps1\ok.txt") else goto :eof
надо именно в одну строку, как я понял7

Цитата epoddubniy:
проверка не должна быть привязана к существованию файлов в дирректории »
но у вас именно так в начале.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:52, 24-03-2021 | #5


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


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

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


Большая просьба помочь с реализацией привязки к планировщику, то есть, сначала происходит проверка наличия задания в планировщике. Если задание есть, скрипт прерывается, если нет, то - создается. Если подобное можно реализовать через powershell буду очень признателен за помощь.

Цитата alpap:
Цитата epoddubniy:
проверка не должна быть привязана к существованию файлов в дирректории »
но у вас именно так в начале. »
совершенно верно, потому что придумать что-т другое не получилось

Отправлено: 15:55, 24-03-2021 | #6


Ветеран


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

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


Цитата epoddubniy:
проверка наличия задания в планировщике »
по какому критерию проверить (TaskPath, TaskName, State - Путь, Имя, Состояние) - ?

Код: Выделить весь код
$myZ = (Get-ScheduledTask).TaskName|where {$_ -eq 'Name Zad'}
If (!$myZ) {"Создаем"}

Отправлено: 16:11, 24-03-2021 | #7


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


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

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


Цитата alpap:
по какому критерию проверить (TaskPath, TaskName, State - Путь, Имя, Состояние) - ? »
по критерию TaskName

Отправлено: 17:51, 24-03-2021 | #8


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


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

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


Цитата:
(!$myZ)
объясните пожалуйста, что значит восклицательный знак перед переменной?

Цитата:
{$_ -eq 'Name Zad'}
скажите пожалуйста, правильно ли будет, если я в кавычках укажу таким образом {$_ -eq '*onstart*'} (или Name нужно обязательно оставить?)

Цитата:
{"Создаем"}
А как описать второе условие, когда задача в планировщике есть и выполнение скрипта нужно остановить?

Отправлено: 14:27, 25-03-2021 | #9


Ветеран


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

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


Цитата epoddubniy:
что значит восклицательный знак перед переменной? »
Отрицание. «НЕ».

Цитата epoddubniy:
правильно ли будет, если я в кавычках укажу таким образом {$_ -eq '*onstart*'} »
Неправильно. Для работы с шаблонами Вам нужен другой оператор, не «-eq».

Отправлено: 15:26, 25-03-2021 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Переименование, если файл с таким именем уже существует... Pshek Скриптовые языки администрирования Windows 15 30-07-2018 15:51
CMD/BAT - [решено] Если файл существует, то запустить на другой машине Alexander_88 Скриптовые языки администрирования Windows 3 10-07-2018 10:32
CMD/BAT - [решено] если файл существует, выполнить Alexander_88 Скриптовые языки администрирования Windows 5 01-07-2018 13:54
CMD/BAT - создать файл если не существует t0ster Скриптовые языки администрирования Windows 0 22-05-2017 21:25
CMD/BAT - [решено] Если папка существует то... Qweezy Скриптовые языки администрирования Windows 2 08-01-2014 02:23




 
Переход