Показать полную графическую версию : [решено] Если файл существует, то - ___, если не существует, то___
epoddubniy
24-03-2021, 13:05
Здравствуйте. Помогите пожалуйста найти ошибку в скрипте.
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, но недосягаемо для моего понимания похоже...
Спасибо!
DJ Mogarych
24-03-2021, 13:37
Сама по себе команда в скобках нормально отрабатывает?
epoddubniy
24-03-2021, 14:12
Да, команда отрабатывает, задание в планировщике создается с необходимыми параметрами
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 нет расширения...
epoddubniy
24-03-2021, 15:52
Проблему получилось решить таким образом. Похожий скрипт нашел на форуме и изменил. Вроде, работает. На мой взгляд все как-то громоздко и проверка не должна быть привязана к существованию файлов в дирректории, а должна быть привязана к существованию задания в планировщике...
@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
а так?
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
24-03-2021, 15:55
Большая просьба помочь с реализацией привязки к планировщику, то есть, сначала происходит проверка наличия задания в планировщике. Если задание есть, скрипт прерывается, если нет, то - создается. Если подобное можно реализовать через powershell буду очень признателен за помощь.
Цитата epoddubniy:
проверка не должна быть привязана к существованию файлов в дирректории »
но у вас именно так в начале. »
совершенно верно, потому что придумать что-т другое не получилось
проверка наличия задания в планировщике »
по какому критерию проверить (TaskPath, TaskName, State - Путь, Имя, Состояние) - ?
$myZ = (Get-ScheduledTask).TaskName|where {$_ -eq 'Name Zad'}
If (!$myZ) {"Создаем"}
epoddubniy
24-03-2021, 17:51
по какому критерию проверить (TaskPath, TaskName, State - Путь, Имя, Состояние) - ? »
по критерию TaskName
epoddubniy
25-03-2021, 14:27
(!$myZ)
объясните пожалуйста, что значит восклицательный знак перед переменной?
{$_ -eq 'Name Zad'}
скажите пожалуйста, правильно ли будет, если я в кавычках укажу таким образом {$_ -eq '*onstart*'} (или Name нужно обязательно оставить?)
{"Создаем"}
А как описать второе условие, когда задача в планировщике есть и выполнение скрипта нужно остановить?
что значит восклицательный знак перед переменной? »
Отрицание. «НЕ».
правильно ли будет, если я в кавычках укажу таким образом {$_ -eq '*onstart*'} »
Неправильно. Для работы с шаблонами Вам нужен другой оператор, не «-eq».
epoddubniy
25-03-2021, 17:07
(!$myZ)
объясните пожалуйста, что значит восклицательный знак перед переменной?
{$_ -eq 'Name Zad'}
скажите пожалуйста, правильно ли будет, если я в кавычках укажу таким образом {$_ -eq '*onstart*'} (или Name нужно обязательно оставить?)
{"Создаем"}
А как описать второе условие, когда задача в планировщике есть и выполнение скрипта нужно остановить?
правильно ли будет, если я в кавычках укажу таким образом {$_ -eq '*onstart*'} »
я что-то не пойму
Если задание есть, скрипт прерывается, если нет, то - создается »
вы же точно знаете имя задания так как сами его даете
/TN "ExcelWinwordStop-CopyAmtlib-ActivateKMS-ONSTART" »
------
не было времени сделать, проверяйте (ничего нигде не меняйте, все в точности соответствует задаче в schtasks из начального поста):
[PowerShell]
$TaskName = 'ExcelWinwordStop-CopyAmtlib-ActivateKMS-ONSTART'
$User = 'NT AUTHORITY\SYSTEM'
$Trigger = New-ScheduledTaskTrigger -AtLogon
$Trigger.Delay = 'PT30S'
$Action = New-ScheduledTaskAction -Execute 'PowerShell.exe' -Argument '-file C:\ps1\StopExcelCopyAtmlibStartKMS-ONSTART.vbs'
$nT = (Get-ScheduledTask).TaskName|where {$_ -eq "$TaskName"}
if ($nT) {'task '+'"'+$TaskName+'"'+' already exists'}
else {Register-ScheduledTask -TaskName $TaskName -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force}
epoddubniy
29-03-2021, 14:55
Спасибо большое! Скрипт отработал на "УРА!"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.