Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Если файл существует, то - ___, если не существует, то___ (http://forum.oszone.net/showthread.php?t=348359)

epoddubniy 24-03-2021 13:05 2953776

Если файл существует, то - ___, если не существует, то___
 
Здравствуйте. Помогите пожалуйста найти ошибку в скрипте.

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 2953779

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

epoddubniy 24-03-2021 14:12 2953782

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

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 2953793

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

@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

alpap 24-03-2021 15:52 2953794

а так?
Код:

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
проверка не должна быть привязана к существованию файлов в дирректории »

но у вас именно так в начале.

epoddubniy 24-03-2021 15:55 2953796

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

Цитата:

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

совершенно верно, потому что придумать что-т другое не получилось

alpap 24-03-2021 16:11 2953798

Цитата:

Цитата epoddubniy
проверка наличия задания в планировщике »

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

Код:

$myZ = (Get-ScheduledTask).TaskName|where {$_ -eq 'Name Zad'}
If (!$myZ) {"Создаем"}


epoddubniy 24-03-2021 17:51 2953810

Цитата:

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

по критерию TaskName

epoddubniy 25-03-2021 14:27 2953871

Цитата:

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

Цитата:

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

Цитата:

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

Iska 25-03-2021 15:26 2953874

Цитата:

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

Отрицание. «НЕ».

Цитата:

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

Неправильно. Для работы с шаблонами Вам нужен другой оператор, не «-eq».

epoddubniy 25-03-2021 17:07 2953888

Цитата:

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

Цитата:

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

Цитата:

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

alpap 25-03-2021 19:56 2953906

Цитата:

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

я что-то не пойму
Цитата:

Цитата epoddubniy
Если задание есть, скрипт прерывается, если нет, то - создается »

вы же точно знаете имя задания так как сами его даете
Цитата:

Цитата epoddubniy
/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 2954255

Спасибо большое! Скрипт отработал на "УРА!"


Время: 09:13.

Время: 09:13.
© OSzone.net 2001-