PDA

Показать полную графическую версию : Скрипт планировщика задач


Laos
20-02-2012, 22:22
Здравствуйте!
Очень нужно написать скрипт в cmd используя средства schtasks. Сам я понятия не имею как сделать это, но излагаю суть.
1. Сам батник может лежать в любой папке.
2. При перетаскивании на него любого другого скрипта, он должен запускать этот скрипт с периодичностью в час.
3. Результат исполняемого скрипта (на выходе текстовик) должен кидаться туда, ОТКУДА был перетащен скрипт.

Пример: исполняемый скрипт "script.bat" лежит в директории C:\. Если его исполнить, то на выходе будет файл "result.txt", который лежит тоже в C:\. Скрипт планировщика "scheduler.bat" лежит на D:\. Так вот если на него с одного диска (C:\) переносить "script.bat", чтобы в той же директории (C:\) появлялся "result.txt".

Может кто помочь?
Или это проще в powershell сделать?
Спасибо

Iska
20-02-2012, 23:31
он должен запускать этот скрипт с периодичностью в час. »
До каких пор? До перезагрузки машины?

Результат исполняемого скрипта (на выходе текстовик) »
Каким образом создаётся этот текстовый файл? Буквально. И что делать в момент очередного ежечасного запуска с новым текстовым файлом?

Или это проще в powershell сделать? »
Язык несущественен.

Laos
21-02-2012, 09:52
1. Да, до перезагрузки
2. Текстовик создается командой вывода в ту же папку, где скрипт ">> result.txt". Т.е. при следующем запуске скрипта должна быть дозапись в файл

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

Iska
21-02-2012, 11:57
Laos, я пока не вижу необходимости использовать планировщик.

1. Сам батник »
@echo off
setlocal enableextensions enabledelayedexpansion

set sFile=%~1
set sPath=%~dp1

if defined sFile (
if exist "%sFile%" (
:Loop
call "%sFile%">>"%sPath%result.txt"
>nul ping.exe -n 3601 127.0.0.1
goto :Loop
) else (
echo File [%sFile%] not found
)
) else (
echo Usage: "%~nx0" ^<Path to file^>
)

endlocal
exit /b 0


2. При перетаскивании на него любого другого скрипта »
Пример такого пакетного файла:
@echo %date% %time% : [%~0]

Laos
21-02-2012, 12:22
Хм... а как тогда задать нужную периодичность? И как вообще с этим скриптом работать? =)

Iska
21-02-2012, 12:35
Периодичность задаётся в:
>nul ping.exe -n 3601 127.0.0.1
как потребное число секунд +1.

И как вообще с этим скриптом работать? »
Так, как Вы и писали — перетащить на этот пакетный файл любой другой пакетный файл. Результатом работы этого «другого» пакетного файла будет дополнен файл «result.txt» в папке размещения этого самого «другого» пакетного файла. Затем будет выдержана пауза в 1 час. Затем опять будет запущен «другой» пакетный файл, результат работы будет добавлен к файлу «result.txt», новая часовая пауза и т.д. до перезагрузки машины или закрытия основного пакетного файла.

Laos
21-02-2012, 12:40
Iska, спасибо!

Laos
21-02-2012, 15:46
Хм.. перетаскивание powershell скрипта не работает - открывает этот скрипт в блокноте.
Как нибудь реально убрать вывод файла result.txt? Просто есть куча скриптов, у которых есть различные выводы.

Iska
21-02-2012, 17:14
Хм.. перетаскивание powershell скрипта не работает - открывает этот скрипт в блокноте. »
Laos, я полагал, речь идёт именно о пакетных файлах (запуск скриптов PowerShell имеет свои специфические особенности). А Вы?

Как нибудь реально убрать вывод файла result.txt? Просто есть куча скриптов, у которых есть различные выводы. »
Поясните Вашу мысль.

Laos
21-02-2012, 17:54
Ну на самом деле меня больше интересует скрипт планировщика для PowerShell скриптов. Моя вина.
Когда я например, выполняю .bat файл в котором просто описана инструкция:

@echo off
set a=1
echo %a% >> 1.txt


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

Iska
21-02-2012, 18:08
Ну на самом деле меня больше интересует скрипт планировщика для PowerShell скриптов. »
Ясно.

Когда я например, выполняю .bat файл в котором просто описана инструкция … то результатом является файл 1.txt в который постоянно дописывается единица, но так же появляется файл result.txt, который описан в скрипте скедулера »
То есть, Вы реализуете вывод в файл изнутри этого «другого» пакетного файла. Тогда я, мягко говоря, не представляю, как можно перенаправить куда-либо уже перенаправленный в файл вывод. Если б Вы ещё согласились указывать файл для вывода посредством параметра при вызове «другого» пакетного файла:

call "%sFile%" "%sPath%result.txt"

и, соответственно, в «другом» пакетном файле:
@echo %date% %time% : [%~0]>>"%~1"
— тогда б было можно.

Laos
21-02-2012, 18:17
Ладно, придется что-то другое придумать. Iska, Спасибо большое за старания!

bredych
12-10-2018, 17:28
кто б напомнил, как обзывается евент логина?
Без указания, какого конкретно юзера (юзера разные, компы не всегда выключаются ночью)

Понятно, что в параметрах schtasks /SC onevent , но какой задать?
Ползание по гуглу дало несколько разных вариантов, ползание по евент вьюеру своей машины вообще ни одного такого события в период логина не дало, потому сижу, чешу репу.
зы, идея однократной задачи в планировщике возникла как попытка костыля в связи с отсутствием идей более логичного и до сих пор работавшего метода (http://forum.oszone.net/post-2835546.html#post2835546)




© OSzone.net 2001-2012