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

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

Ubiquiti 22-02-2016 12:22 2608843

работа с schtasks
 
Привет есть такой код
Код:

@echo off
color 1a
mode con: cols=54 lines=22
 echo.
 echo    -----------------------------------------------
 echo        Обновление CONS+ и отправка отчета v1.4
 echo    -----------------------------------------------
 echo.
 echo.

rem проверяем интернет
ping mail.ru -n 1 >Nul
if ErrorLevel 1 (
em определяем дату и время
set day=%DATE:~0,2%
set month=%DATE:~3,2%
set year=%DATE:~6,4%

set /A hour=%TIME:~0,2%+1
set minute=%TIME:~3,2%

set ddmmyyyy=%day%/%month%/%year%
set hhmm=%hour%:%minute%
schtasks /create /tn "\админ\update_k+" /tr "D:\Consultant\cons_otchet_work.cmd" /sc once /st "%hhmm%" /sd "%ddmmyyyy%"
exit
)

rem вычисляем день недели
set /a y=%date:~6,4%
set /a m=1%date:~3,2%-100
set /a d=1%date:~0,2%-100
set /a i=(%y%-1901)*365 + (%y%-1901)/4 + %d% + (!(%y% %% 4))*(!((%m%-3)^&16))
set /a i=(%i%+(%m%-1)*30+2*(!((%m%-7)^&16))-1+((65611044^>^>(2*%m%))^&3))%%7+1

rem если вторник то обновляем и отправляем отчет
if "%i%"=="2" (
    echo      Сегодня %i% день обновление + отправка отчета
   
    <nul set /p sVar= Обновляем Консультант+        -
    >nul start /wait /min D:\Consultant\cons.exe /adm /base* /receive_inet /yes && echo OK || echo ER
   
    <nul set /p sVar= Копируем файлы в temp          -
    >nul copy D:\Consultant\RECEIVE\*.usr D:\Consultant\temp
    >nul xcopy D:\Consultant\ADM\STS D:\Consultant\temp\STS /I && echo OK || echo ER
   
    <nul set /p sVar= Архивируем данные для отправик -
    >nul C:\progra~1\7-Zip\7z.exe a D:\Consultant\temp\yake.7z -r D:\Consultant\temp\ && echo OK || echo ER
   
    <nul set /p sVar= Отправляем отчет              -
    >null C:\blat\full\blat.exe -server mail.nic.ru -f a@komenergo.ru -u a@komenergo.ru -pw  -tf C:\blat\full\sendlist.txt -subject yake -body "Юзерка от ЯКЭ." -attach D:\Consultant\temp\yake.7z && echo OK || echo ER
   
    <nul set /p sVar= Очищаем папку Temp            -
    >nul del /f /q D:\Consultant\temp
    >nul del /f /q D:\Consultant\temp\STS && echo OK || echo ER
    echo CONS+ обновлен отчет отправлен -OK
        if exist C:\Windows\System32\Tasks\админ\update_k+.* (
          schtasks /delete /tn "\админ\update_k+" /F)
) else (
echo                Сегодня %i% день обновление
 
    <nul set /p sVar= Обновляем КОНС+ -
    start /wait /min D:\Consultant\cons.exe /adm /base* /receive_inet /yes && echo OK || echo ER
    if exist C:\Windows\System32\Tasks\админ\update_k+.* (
          schtasks /delete /tn "\админ\update_k+" /F)
)
pause

если в нем создаю задания для планировщика заданий то он ругается на дату и время, а если эту часть скопировать в пустой скрипт то все отлично создает

отдельно все ок
[/code]

rem проверяем интернет
ping mail.ru -n 1 >Nul
if ErrorLevel 1 (
em определяем дату и время
set day=%DATE:~0,2%
set month=%DATE:~3,2%
set year=%DATE:~6,4%

set /A hour=%TIME:~0,2%+1
set minute=%TIME:~3,2%

set ddmmyyyy=%day%/%month%/%year%
set hhmm=%hour%:%minute%
schtasks /create /tn "\админ\update_k+" /tr "D:\Consultant\cons_otchet_work.cmd" /sc once /st "%hhmm%" /sd "%ddmmyyyy%"
exit

[/code]

подскажите в чем моя рукажопость

Ubiquiti 22-02-2016 12:28 2608848

"%hhmm%" /sd "%ddmmyyyy%" это я уже по разному пробовал, а так писал %hhmm% /sd %ddmmyyyy%

Foreigner 22-02-2016 15:35 2608908

Ubiquiti, В справке написано, что нельзя использовать /sc once с /sd
Код:

    /SD    <дата_начала>      Дата первого запуска задачи. Формат:
                      dd/mm/yyyy. По умолчанию используется текущая
                      дата. Этот параметр неприменим для следующих типов расписания: ONCE,
                      ONSTART, ONLOGON, ONIDLE, ONEVENT.


Ubiquiti 22-02-2016 15:52 2608912

Тогда почему если кусок кода выполнять отдельно то все работает, а если вставить в код в тот что Я предоставил в самом начале то не работает

Код:

schtasks /create  /tn "\test\123" /tr "E:\ScriptPS\cmd\interfeis.cmd" /sc once /st 20:30 /sd 22/02/2016
вот такой код создает задачу которые один раз 22 числа в 20-30 запускает задачу

Foreigner 22-02-2016 16:03 2608916

Ubiquiti, Проверьте ваши вычисления, возможно там ошибка. День недели проще узнать через wmi:
Код:

@echo off
setlocal

set "wmic=wmic path win32_localtime get dayofweek /value"
for /f %%i in ('"%wmic%"') do 1>nul set "%%i"

if %dayofweek% equ 2 echo вторник


Ubiquiti 22-02-2016 16:09 2608920

странно!!! может как не будь хитро переменную подсунуть и .Вы не на ту часть кода смотрите та часть которые Вы привели в пример работает отлично

вот с этой частью проблема

Код:

rem проверяем интернет
ping mail.ru -n 1 >Nul
if ErrorLevel 1 (
em определяем дату и время
set day=%DATE:~0,2%
set month=%DATE:~3,2%
set year=%DATE:~6,4%

set /A hour=%TIME:~0,2%+1
set minute=%TIME:~3,2%

set ddmmyyyy=%day%/%month%/%year%
set hhmm=%hour%:%minute%
schtasks /create /tn "\админ\update_k+" /tr "D:\Consultant\cons_otchet_work.cmd" /sc once /st "%hhmm%" /sd "%ddmmyyyy%"
exit
)


Foreigner 22-02-2016 16:27 2608926

Ubiquiti, Либо пропишите setlocal enabledelayedexpansion или уберите блок кода из скобок:
Код:

ping mail.ru -n 1 | 1>nul findstr "TTL=" || goto:eof
rem определяем дату и время
....


Ubiquiti 22-02-2016 16:28 2608927

предлагаете через goto сделать (ой как не люблю goto отбили желания давно)

ок буду пробовать готовые код выложу мож кому пригодиться в хозяйстве

Ubiquiti 22-02-2016 16:52 2608945

Спасибо Foreigner за помощь в setlocal enabledelayedexpansion почитал просветился все заработало. Вот код
Код:

Setlocal EnableDelayedExpansion
@echo off

какой-то код

<nul set /p sVar= На компьютере интернет
> null ping www.ru
If !ErrorLevel! == 0 (
echo - NO
rem определяем дату и время
set /A hour=%TIME:~0,2%+1
set DDMMDYYYY=%DATE:~0,2%/%DATE:~3,2%/%date:~6,4%
set HHMM=!hour!:%TIME:~3,2%
rem создаем задачу
schtasks /create  /tn "\test\tuc+" /tr "E:\ScriptPS\cmd\interfeis.cmd" /sc once /st !HHMM! /sd !DDMMDYYYY!
pause
exit
)

какой-то код


alpap 24-02-2016 00:40 2609479

Наверное правильнее было бы эту строку записать так:
Код:

set HHMM=!hour:24=0!:%TIME:~3,2%
.

Ubiquiti 24-02-2016 13:22 2609602

Цитата:

Цитата alpap
Наверное правильнее было бы эту строку записать так: »

да все в принципе заработало есть пару косяков, но все равно планирую переписать код на PoSH потому что когда много переменных трудно в cmd работать и хочу еще пару моментов реализовать


Время: 16:00.

Время: 16:00.
© OSzone.net 2001-