Войти

Показать полную графическую версию : [решено] Запуск указанных программ в указанное время.


Страниц : [1] 2

ritrs@vk
16-05-2015, 23:10
Приветствую форумчане. Есть задание(в теме указано что именно). Командый файл добавляет указанную программу в назначенные задачи и она должна выполнятся, но в "Статус" - на момент наступления запуска пишит что "Запуск не удался". В чём может быть проблема?
@set /P k1="Vvedite vremya zapuska program: "
:F
@set /P k2="Vvdeite putb k programmam: "
@echo %k2% >> myfile.txt
@set /P ar="Eshche odny programy? Y-da, N-net: "
@if %ar%==Y goto F
@If %ar%==N goto next
:next
if not exist %k2% goto :bad && else
@echo off
for /f "tokens=*" %%i in (myfile.txt) do (at "%k1%" start "%k2%")
echo "Deystvie vipolneno yspeshno"
del myfile.txt
pause>nul
:bad
@echo "Programma ne naidena, popro6yem ewe?"
@goto F
@del myfile.txt

Iska
17-05-2015, 00:06
Потому что кошмар вместо кода.

ritrs@vk
17-05-2015, 00:08
Потому что кошмар вместо кода. »

ну тогда "Ветеран" пожалуйста объясните что не так.

iccup.platoon@vk
17-05-2015, 02:09
Восьмерка ругается на at и предлагает юзать что-то-мам-tasks, который юзать не научен...
Где мой 17 виндовсов ХР =)

ritrs@vk
17-05-2015, 02:42
Восьмерка ругается на at и предлагает юзать что-то-мам-tasks, который юзать не научен...
Где мой 17 виндовсов ХР »
У меня 7ка.

Iska
17-05-2015, 06:20
ну тогда "Ветеран" пожалуйста объясните что не так. »
Всё не так.


Уберите все подавители вывода «@» кроме как перед «echo off». Поместите эту команду в начало пакетного файла.
Перестаньте использовать транслит. Пишите либо на английском, либо на русском и сохраняйте пакетный файл в кодировке OEM/866.
Кавычки в «set /p» могут быть нужны, но только в виде перед всем выражением:set /p "sVar=Enter some value:"В Вашем случае они не нужны вовсе.
Начните использовать «говорящие» имена переменных окружения вместо однобуквенных идентификаторов вида «k1», «k2», «ar». Выбор системы произволен. Я бы использовал вместо озвученного, например, «sTime», «sPath», «sChoice», где первая буква — мнемонический признак псевдотипа переменной окружения, к тому же позволяет не пересекаться с существующими системными и пользовательскими переменными окружения, такими, как «PATH». Кто-то для этого добавляет в начало имени переменной знак «$» («$» используется как обязательный признак имени переменной в KiXtart и PowerShell).
Вывод в файл, затем чтение из него — зачем? Не вижу никакого смысла и преимущества перед непосредственным созданием задания сразу же. Скрипач не нужен.
Кусок кода:@If %ar%==N goto next
:next
можно просто выкинуть — ничего не изменится. Он абсолютно лишний.
«Ниасилил»:if not exist %k2% goto :bad && else
Командный процессор это тоже не осилит. К тому же Ваша логика — цель и смысл проверки существования только последнего введённого пути — от меня ускользает.
:bad
@echo "Programma ne naidena, popro6yem ewe?"
@goto F
@del myfile.txt
Тут вообще сказка. Я теряюсь в поисках логики Ваших действий.


Напишите словами, что Вы хотели, Вам напишут код, каковой должен быть, и дадут пояснения по нему.

ritrs@vk
17-05-2015, 15:17
«Ниасилил»:
Код:
if not exist %k2% goto :bad && else
Командный процессор это тоже не осилит. К тому же Ваша логика — цель и смысл проверки существования только последнего введённого пути — от меня ускользает. »

Ну тут как бы я хотел сделать проверку. То есть перед тем как удалять программу\программы нужно проверить существуют ли они вообще и если нет то отправить сообщение пользователю.


Код:
:bad
@echo "Programma ne naidena, popro6yem ewe?"
@goto F
@del myfile.txt
Тут вообще сказка. Я теряюсь в поисках логики Ваших действий. »

Ну тут как раз и вывод сообщения о том что программы\программ нету и отправка на повторный ввод.

Уберите все подавители вывода «@» кроме как перед «echo off». Поместите эту команду в начало пакетного файла. »
Кавычки в «set /p» могут быть нужны, но только в виде перед всем выражением:
Код: Выделить весь код
set /p "sVar=Enter some value:"
В Вашем случае они не нужны вовсе.

А тут вы не правы, если убрать кавычки то текст не будет выводитс так как он подавлен @echo off

Ах да, я в принципе "почистил" от того что вы сочли не уместным:

@echo off
set /P sTime="Enter the time start: "
:more
set /P sPath="Enter the path to programms: "
echo %sPath% >> list.txt
set /P sChoice="Let's add one more? Y-yes, N-no: "
if %sChoice%==Y goto more
@echo off
for /f "tokens=*" %%i in (myfile.txt) do (at "%sTime%" start "%sPath%")
echo "Action successful."
del list.txt
pause>nul


Но результат по прежнему тот же, запуск не удался.

В итоге у меня два вопроса:
1) Как бороться?
2) Как реализовать проверку есть ли программа или нету по заданом пути?

Iska
17-05-2015, 16:32
Iska, а в чём разница с вариантом »
Если я правильно Вас цитирую ;) — в наличии спецсимволов.

А тут вы не правы, если убрать кавычки то текст не будет выводитс так как он подавлен @echo off »
Да ну.
http://i.imgur.com/nOUzzOV.png

Ах да, я в принципе "почистил" от того что вы сочли не уместным: »
Не от всего. Осталось использование промежуточного файла (точнее, теперь двух файлов — в один из которых Вы пишете и удаляете, и второй — из которого Вы пытаетесь читать), два раза «@echo off».

Но результат по прежнему тот же, запуск не удался. »
А что Вы, собственно, запускаете? У Вас есть «start.bat», «start.cmd», «start.com», або «start.exe»? «start.exe» наличествовал в Windows 9x, если мне не изменяет память, под NT его не было. Так что ничего удивительного нет в том, что операционная система не может найти в текущем каталоге и в %PATH% ни одно из перечисленного и исполнить.

ritrs@vk
17-05-2015, 16:42
Цитата ritrs@vk:
А тут вы не правы, если убрать кавычки то текст не будет выводитс так как он подавлен @echo off »
Да ну. »

Ну я говорю как есть.
Я имел ввиду текст который выводится командой echo а не через set.
А что Вы, собственно, запускаете? У Вас есть «start.bat», «start.cmd», «start.com», або «start.exe»? «start.exe» наличествовал в Windows 9x, если мне не изменяет память, под NT его не было. Так что ничего удивительного нет в том, что операционная система не может найти в текущем каталоге и в %PATH% ни одно из перечисленного и исполнить. »

командой start я запускаю программу которая расположена по пути %sPath%, разве нет?

Да и в "Назначении задач" отображается иконка программы, тобишь ее путь указан и она найдена, но она не запускается.

Не от всего. Осталось использование промежуточного файла (точнее, теперь двух файлов — в один из которых Вы пишете и удаляете, и второй — из которого Вы пытаетесь читать), два раза «@echo off». »

Почему два файла? Один и тот же, я создаю - записываю и удаляю. Где второй?

Iska
17-05-2015, 17:01
Я имел ввиду текст который выводится командой echo а не через set. »
Аналогично:
http://i.imgur.com/zCgfqsV.png

командой start я запускаю программу которая расположена по пути %sPath%, разве нет? »
Команда «start» — внутренняя команда командного процессора (интерпретатор команд) «cmd.exe». И работает она только из-под него. Посему для её использования сначала нужно запустить этот самый командный процессор, наподобие «cmd.exe /c"start "" "bla-bla-bla.exe""». Только вот зачем Вам вообще там «start» нужен?

Да и в "Назначении задач" отображается иконка программы, тобишь ее путь указан и она найдена, но она не запускается. »
«Не верю!» (с).

http://i.imgur.com/0SlC2Jk.png

http://i.imgur.com/ddFVK03.png
Почему два файла? Один и тот же, я создаю - записываю и удаляю. Где второй? »
Здесь:
@echo off
set /P sTime="Enter the time start: "
:more
set /P sPath="Enter the path to programms: "
echo %sPath% >> list.txt
set /P sChoice="Let's add one more? Y-yes, N-no: "
if %sChoice%==Y goto more
@echo off
for /f "tokens=*" %%i in (myfile.txt) do (at "%sTime%" start "%sPath%")
echo "Action successful."
del list.txt
pause>nul »

ritrs@vk
17-05-2015, 21:50
Хорошо, на счёт файлов не заметил. Исправил.
Команда «start» — внутренняя команда командного процессора (интерпретатор команд) «cmd.exe». И работает она только из-под него. Посему для её использования сначала нужно запустить этот самый командный процессор, наподобие «cmd.exe /c"start "" "bla-bla-bla.exe""». Только вот зачем Вам вообще там «start» нужен? »

Как тогда мне организовать запуск программы без использования start?

@echo off
set /P sTime="Enter the time start: "
:more
set /P sPath="Enter the path to programms: "
echo %sPath% >> list.txt
set /P sChoice="Let's add one more? Y-yes, N-no: "
if %sChoice%==Y goto more
for /f "tokens=*" %%i in (list.txt) do (at "%sTime%" start"%sPath%")
echo "Action successful."
del list.txt
pause>nul


Между прочим, в пред. версиях, с моего позволенья "программы" добавляло с иконкой. Честно. А вот теперь действительно не работает. Кстати, что за программа которую вы используете?

Только вот зачем Вам вообще там «start» нужен? »
Препод так делал.

Iska
18-05-2015, 10:34
Как тогда мне организовать запуск программы без использования start? »
Как есть, указывая только сам исполняемый файл безо всяких «start».

Между прочим, в пред. версиях, с моего позволенья "программы" добавляло с иконкой. Честно. »
Не верю. «start», как внутренняя команда командного процессора, не может иметь иконки.

Кстати, что за программа которую вы используете? »
Вы про Far Manager?

Препод так делал. »
Если он делал так в данном конкретном случае — то это попросту нелепо.

ritrs@vk
18-05-2015, 12:30
Как тогда мне организовать запуск программы без использования start? »
Как есть, указывая только сам исполняемый файл безо всяких «start». »

Ну тогда у меня появляется ошибка что не правильный синтаксис команды at.
В прочем сейчас еще раз попробую. Просто указать путь к файлу?
Между прочим, в пред. версиях, с моего позволенья "программы" добавляло с иконкой. Честно. »
Не верю. «start», как внутренняя команда командного процессора, не может иметь иконки. »

Я о том что появлялась иконка программы которую я вызывал.

Iska
18-05-2015, 15:03
Ну тогда у меня появляется ошибка что не правильный синтаксис команды at. »
Покажите конечный код. Покажите скриншот с его исполнением и ошибкой.

Я о том что появлялась иконка программы которую я вызывал. »
И я о том же. Не может там быть у «start» иконки.

ritrs@vk
18-05-2015, 17:34
Код:

@echo off
set /P sTime="Enter the time start: "
:more
set /P sPath="Enter the path to programms: "
echo %sPath% >> list.txt
set /P sChoice="Let's add one more? Y-yes, N-no: "
if %sChoice%==Y goto more
for /f "tokens=*" %%i in (list.txt) do (at "%sTime%" start file"%sPath%")
echo "Action successful."
del list.txt
pause>nul



Изображение (http://rghost.ru/6G8ySspNs.view)

ritrs@vk
20-05-2015, 19:42
Iska, ну так что? Ничем не поможете?

Iska
22-05-2015, 16:45
Код пакетного файла:
@echo off
setlocal enableextensions enabledelayedexpansion

:RepeatEnterTime
set sTime=
set /p sTime=Enter time for start programs [hh:mm]:

if not defined sTime (
echo Need enter time.
goto :RepeatEnterTime
)

echo %sTime%| >nul 2>&1 findstr.exe /i /r /c:"^[0-2][0-9]\:[0-5][0-9]$" || (
echo Need enter time in format [hh:mm].
goto :RepeatEnterTime
)

:RepeatEnterPath
set sPath=
set /p sPath=Enter path to program:

if not defined sPath (
echo Need enter path.
goto :RepeatEnterPath
)

if not exist "%sPath%" (
echo Can't find file [%sPath%].
echo Need correct path to program.
goto :RepeatEnterPath
)

at.exe %sTime% /interactive "%sPath%"

set sChoice=

if exist "%SystemRoot%\System32\choice.exe" (
choice.exe /m "Another program?"
if errorlevel 1 goto :RepeatEnterPath
) else (
set /p sChoice=Another program? [YN]:
if defined sChoice if /i "!sChoice!" equ "y" goto :RepeatEnterPath
)

endlocal
exit /b 0

Пример выполнения кода:
http://i.imgur.com/3tVRoBr.png
Запуск созданных в примере заданий из Планировщика:
http://i.imgur.com/6chnyOF.png

ritrs@vk
22-05-2015, 21:34
Большое спасибо, Iska. На досуге просмотрю код. Можете объяснить команду setLocal?

Iska
22-05-2015, 21:40
Можете объяснить команду setLocal? »
setlocal /?
Если после прочтения останутся вопросы — спрашивайте.

ritrs@vk
22-05-2015, 23:23
Если после прочтения останутся вопросы — спрашивайте. »

Ну я так понял setlocal создает локальную среду относительно текущего файла? А в чём ее особености?




© OSzone.net 2001-2012