Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Запуск указанных программ в указанное время.

Ответить
Настройки темы
CMD/BAT - [решено] Запуск указанных программ в указанное время.

Новый участник


Сообщения: 24
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Приветствую форумчане. Есть задание(в теме указано что именно). Командый файл добавляет указанную программу в назначенные задачи и она должна выполнятся, но в "Статус" - на момент наступления запуска пишит что "Запуск не удался". В чём может быть проблема?
Код: Выделить весь код
@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

Отправлено: 23:10, 16-05-2015

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Потому что кошмар вместо кода.
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:06, 17-05-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 24
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Цитата Iska:
Потому что кошмар вместо кода. »
ну тогда "Ветеран" пожалуйста объясните что не так.

Последний раз редактировалось ritrs@vk, 17-05-2015 в 00:20.


Отправлено: 00:08, 17-05-2015 | #3


Аватара для iccup.platoon@vk

Пользователь


Сообщения: 82
Благодарности: 9

Профиль | Сайт | Отправить PM | Цитировать


Восьмерка ругается на at и предлагает юзать что-то-мам-tasks, который юзать не научен...
Где мой 17 виндовсов ХР

-------
Да, я дотошный. Да, я всегда уточняю цели. Зато выполняю задание на совесть.


Отправлено: 02:09, 17-05-2015 | #4


Новый участник


Сообщения: 24
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 02:42, 17-05-2015 | #5


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата ritrs@vk:
ну тогда "Ветеран" пожалуйста объясните что не так. »
Всё не так.
  • Уберите все подавители вывода «@» кроме как перед «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
    Тут вообще сказка. Я теряюсь в поисках логики Ваших действий.

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

Отправлено: 06:20, 17-05-2015 | #6


Новый участник


Сообщения: 24
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Цитата Iska:
«Ниасилил»:
Код:
Код: Выделить весь код
if not exist %k2% goto :bad && else
Командный процессор это тоже не осилит. К тому же Ваша логика — цель и смысл проверки существования только последнего введённого пути — от меня ускользает. »
Ну тут как бы я хотел сделать проверку. То есть перед тем как удалять программу\программы нужно проверить существуют ли они вообще и если нет то отправить сообщение пользователю.


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

Цитата Iska:
Уберите все подавители вывода «@» кроме как перед «echo off». Поместите эту команду в начало пакетного файла. »
Цитата Iska:
Кавычки в «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) Как реализовать проверку есть ли программа или нету по заданом пути?

Последний раз редактировалось ritrs@vk, 17-05-2015 в 15:49.


Отправлено: 15:17, 17-05-2015 | #7


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата Georgio:
Iska, а в чём разница с вариантом »
Если я правильно Вас цитирую — в наличии спецсимволов.


Цитата ritrs@vk:
А тут вы не правы, если убрать кавычки то текст не будет выводитс так как он подавлен @echo off »
Да ну.
Скрытый текст


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

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

Отправлено: 16:32, 17-05-2015 | #8


Новый участник


Сообщения: 24
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


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

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

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

Отправлено: 16:42, 17-05-2015 | #9


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата ritrs@vk:
Я имел ввиду текст который выводится командой echo а не через set. »
Аналогично:
Скрытый текст


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

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

Скрытый текст



Цитата ritrs@vk:
Почему два файла? Один и тот же, я создаю - записываю и удаляю. Где второй? »
Здесь:
Цитата ritrs@vk:
Код: Выделить весь код
@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
»
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:01, 17-05-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Запуск указанных программ в указанное время.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Запуск программ в цикле Good AutoIt 0 23-10-2013 21:56
CMD/BAT - Таймер для bat(исполняет скрипт в указанное время и дату) caxarok Скриптовые языки администрирования Windows 1 25-10-2011 01:08
Debian/Ubuntu - Запуск программ с привилегиями Аlchemist Общий по Linux 8 01-08-2008 19:09
Запуск программ Guest Microsoft Windows 95/98/Me (архив) 2 04-03-2004 21:10
Перегрузка рабочей станции в указанное время Guest Microsoft Windows NT/2000/2003 8 06-12-2002 16:52




 
Переход