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

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

55kadi 23-10-2016 14:51 2680896

Запуск .bat определенное количество раз и определенное количество дней
 
1 есть .bat файл, который запускает некий скрипт. Требуется настроить его так, что бы запустить можно было определенное количество раз. Как это реализовать?

2 есть .bat файл, который запускает некий скрипт. Требуется настроить его так, что бы запустить можно было определенное количество дней. Как это реализовать?

55kadi 23-10-2016 14:55 2680899

будет работать в определеный день


@if "%date%" neq "23.04.2015" exit/b 1

будет работать каждое 10-е число месяца


@if "%date:~,2%" neq "10" exit/b 1

а мне надо


1 вариант запуск происходил определенное количество раз
2 вариант определенное количество дней

Iska 23-10-2016 15:37 2680911

Цитата:

Цитата 55kadi
1 есть .bat файл, который запускает некий скрипт. Требуется настроить его так, что бы запуск происходил определенное количество раз. Как это реализовать? »

Код:

for /l %%i in (1, 1, определенное количество раз) do call некий скрипт
Цитата:

Цитата 55kadi
что бы запуск происходил определенное количество дней. »

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

55kadi 23-10-2016 15:47 2680919

стобы можно было запустить например только 3 раза BAT

1 есть .bat файл, который запускает некий скрипт. Требуется настроить его так, что бы запустить можно было определенное количество раз. Как это реализовать?

2 есть .bat файл, который запускает некий скрипт. Требуется настроить его так, что бы запустить можно было определенное количество дней. Как это реализовать?

Iska 23-10-2016 16:32 2680927

55kadi, даже если сто раз сказать «Мёд, мёд» — во рту сладко не станет. От того, что Вы тупо повторяете первое сообщение, смысла не прибавится.

На первый вопрос ответ был дан выше.

55kadi 23-10-2016 17:27 2680937

for /l %%i in (1, 1, ) do call del /F /S /Q /A C:\Users\dk\Desktop\VEHI\*.*


сделал так но не работает

megaloman 23-10-2016 17:43 2680945

На уровне примитивного вируса: в текст батника после GoTo :Eof пишется служебная инфа для работы счетчика.
Батник позволит запустить Ваш код не более указанного числа раз
Код:

@Echo Off
cls
Set /A NTime=5

SetLocal EnableExtensions EnableDelayedExpansion

Set /A iTime=0
Set "iBat=%~dpnx0"
FOR /F "usebackq tokens=1,2,3 delims= " %%i IN (`type "%iBat%"`) DO (
        If "%%i"=="@@@" Set /A iTime+=1
)
If %iTime% GEQ %NTime% GoTo :Eof
echo @@@ %Date% %Time% >>"%iBat%"

Echo before the script was run %iTime% times

Pause
GoTo :Eof

Батник позволит запустить Ваш код не более указанного числа дней, не обязательно вподряд
Код:

@Echo Off
cls
Set /A NDays=3

SetLocal EnableExtensions EnableDelayedExpansion

Set /A iTime=0
Set "iBat=%~dpnx0"
FOR /F "usebackq tokens=1,2,3 delims= " %%i IN (`type "%iBat%"`) DO (
        If "%%i"=="@@@" Set /A iTime+=1
        Set "iDate=%%j"
)

If %iTime% GEQ %NDays% GoTo :Eof
If Not "%Date%"=="%iDate%" echo @@@ %Date% %Time% >>"%iBat%"

Echo before the script was run %iTime% days, last day was %iDate%

Pause
GoTo :Eof

Вместо (или после) Echo перед Pause можете написать свой код

55kadi 23-10-2016 18:11 2680955

megaloman,

все работает спасибо

но после переделки BAT в EXE счетчик не работает

есть вариант заставить его работать ?

Iska 23-10-2016 18:14 2680956

Цитата:

Цитата 55kadi
for /l %%i in (1, 1, ) do call del /F /S /Q /A C:\Users\dk\Desktop\VEHI\*.*
сделал так но не работает »

Естественно. Вы ведь указали выполнение цикла ровно 0 раз.

megaloman 23-10-2016 18:18 2680959

Цитата:

Цитата 55kadi
но после переделки BAT в EXE счетчик не работает

Вариант - где-то делать служебный файл для работы счетчика, но именно этого я хотел избежать.

55kadi 23-10-2016 18:19 2680960

a где изменить количество циклов ?

делать служебный файл для работы счетчика

как это сделать ?

Iska 23-10-2016 18:44 2680967

Цитата:

Цитата 55kadi
a где изменить количество циклов ? »

Там, где в примере написано определенное количество раз. Можно также открыть командную строку, написать:
Код:

for /?
нажать Enter и прочитать.

55kadi 23-10-2016 19:43 2680979

Цитата:

Цитата Iska
Там, где в примере написано определенное количество раз. Можно также открыть командную строку, написать: »

все перетситал но не понял можете помочь надо 3 раза

megaloman 23-10-2016 20:20 2680987

55kadi, Пишется служебная инфа для работы счетчика во вспомогательный log-файл в папку %Tmp%.
Батник позволит запустить Ваш код не более указанного числа раз
Код:

@Echo Off

Rem Кол-во возможных запусков батника
Set /A NTime=5

SetLocal EnableExtensions EnableDelayedExpansion

Set /A iTime=0
Set "iBat=%Tmp%\%~nx0.log"
FOR /F "usebackq tokens=1,2,3 delims= " %%i IN (`type "%iBat%" 2^>nul`) DO (
        If "%%i"=="@@@" Set /A iTime+=1
)

If %iTime% GEQ %NTime% GoTo :Eof
echo @@@ %Date% %Time% >>"%iBat%"

Echo before the script was run %iTime% times & Pause
GoTo :Eof

Батник позволит запустить Ваш код не более указанного числа дней, не обязательно вподряд
Код:

@Echo Off

Rem Кол-во возможных для запуска дней
Set /A NDays=3

SetLocal EnableExtensions EnableDelayedExpansion

Set /A iTime=0
Set "iBat=%Tmp%\%~nx0.log"
FOR /F "usebackq tokens=1,2,3 delims= " %%i IN (`type "%iBat%" 2^>nul`) DO (
        If "%%i"=="@@@" Set /A iTime+=1
        Set "iDate=%%j"
)

If %iTime% GEQ %NDays% GoTo :Eof
If Not "%Date%"=="%iDate%" echo @@@ %Date% %Time% >>"%iBat%"

Echo before the script was run %iTime% days, last day was %iDate% & Pause
GoTo :Eof

Вместо (или после) Echo перед Pause можете написать свой код

От меня ускользает смысл этого действа. А зачем это всё нужно, не проще ли использовать планировщик? Тем более мне не понятен смысл исполнения Del в цикле
FOR /L %%i IN (1,1,125) DO Del ....
125 раз вподряд.

Iska 23-10-2016 20:50 2680995

Цитата:

Цитата megaloman
От меня ускользает смысл этого действа. А зачем это всё нужно, не проще ли использовать планировщик? Тем более мне не понятен смысл исполнения Del в цикле
FOR /L %%i IN (1,1,125) DO Del ....
125 раз вподряд. »

Не только от Вас, коллега ;).

55kadi 23-10-2016 20:51 2680996

Цитата:

Цитата megaloman
Вместо (или после) Echo перед Pause можете написать свой код »

пишу свой код но он не работает

куда точно писать

заранее спасибо

55kadi 23-10-2016 21:14 2681001

@Echo Off

Rem Кол-во возможных запусков батника
Set /A NTime=2

SetLocal EnableExtensions EnableDelayedExpansion

Set /A iTime=0
Set "iBat=%Tmp%\%~nx0.log"
FOR /F "usebackq tokens=1,2,3 delims= " %%i IN (`type "%iBat%" 2^>nul`) DO (
If "%%i"=="@@@" Set /A iTime+=1
)

If %iTime% GEQ %NTime% GoTo :Eof
echo @@@ %Date% %Time% >>"%iBat%"


del /F /S /Q /A C:\Users\dk\Desktop\VEHI\*.* & Pause
GoTo :Eof

сделал так но не работает

megaloman 23-10-2016 22:26 2681031

55kadi,
Запустите отладочный вариант, результат (что выдаёт батник), продемонстрируйте здесь.
Код:

@Echo Off

Set /A NTime=5

SetLocal EnableExtensions EnableDelayedExpansion

Set /A iTime=0

Set "iBat=%Tmp%\%~nx0.log"
FOR /F "usebackq tokens=1,2,3 delims= " %%i IN (`type "%iBat%" 2^>nul`) DO (
        If "%%i"=="@@@" Set /A iTime+=1
)

Echo NTime=%NTime% iTime=%iTime% log-file=%iBat% & Pause

If %iTime% GEQ %NTime% GoTo :Eof
echo @@@ %Date% %Time% >>"%iBat%"

echo del /F /S /Q /A C:\Users\dk\Desktop\VEHI\*.*
GoTo :Eof


55kadi 23-10-2016 22:47 2681037

Цитата:

Цитата megaloman
Запустите отладочный вариант, результат (что выдаёт батник), продемонстрируйте здесь. »


megaloman 23-10-2016 23:51 2681053

55kadi, вы запустили батник более 5 разрешенных раз.
ВЫ задали макс значение NTime=5, cчетчик запусков iTime=5 тоже, то есть Вы запускал батник 5 раз или более. Посмотрите лог-файл, который создал батник, и, если хотите восстановить разрешение на работу батника, удалите его. Или увеличьте значение NTime.
То есть батник отработал как надо.

55kadi 24-10-2016 20:54 2681328

а как вставить длинный код ?

for /r C:\==============
)
for /r C:\==========================
)

for /r C:\=================================== %%i
)
for /r C:\======================= %%i

)

megaloman 24-10-2016 22:27 2681352

55kadi, Что Вы имеете ввиду? Вы писали:

del /F /S /Q /A C:\Users\dk\Desktop\VEHI\*.* & Pause
Здесь делается одна команда Del и затем Pause
Можете эту строку удалить и написать код любой длины из любого количества строк вместо неё.
Ваши рисуночки с For мне непонятны. Попробуйте сами почитать описание For по команде в командном окне For /?
Или опишите задачу, чтобы можно было от чего-то отталкиваться.

55kadi 24-10-2016 22:39 2681354

так правильно будет



@Echo Off

Rem Кол-во возможных запусков батника
Set /A NTime=2

SetLocal EnableExtensions EnableDelayedExpansion

Set /A iTime=0
Set "iBat=%Tmp%\%~nx0.log"
FOR /F "usebackq tokens=1,2,3 delims= " %%i IN (`type "%iBat%" 2^>nul`) DO (
If "%%i"=="@@@" Set /A iTime+=1
)

If %iTime% GEQ %NTime% GoTo :Eof
echo @@@ %Date% %Time% >>"%iBat%"

Echo before the script was run %iTime% times

)
for /r C:\==============
)
for /r C:\==========================
)

for /r C:\=================================== %%i
)
for /r C:\======================= %%i

)
GoTo :Eof
EXIT

alpap 25-10-2016 03:16 2681385

megaloman,
Думаю 55kadi надо что-то типа:
Код:

@echo off
::...
set "dest=s_file.bat"
::...
<"%~f0">"%dest%" (for /f "delims=[]" %%a in ('find/n "::(Kod)"^|more +1') do @more +%%a)
call "%dest%"
exit

::(Kod)
@echo off
::Здесь пишем свой
::длинный код
pause>nul


megaloman 25-10-2016 07:06 2681395

alpap, я отчаялся понять, что хочет 55kadi


Время: 03:07.

Время: 03:07.
© OSzone.net 2001-