Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ *.bat

Автор: compiler 17.02.2008 1:12

Добрый день!
Вот надо написать несколько батников, а я их в жизни не писал... И что то нечего не получается sad.gif
Скажем, есть задание:
выводить на экран количество дней до 20.01.2008, если день наступил сообщить об этом...

в часности интересует вопрос переменных и процедур...

помогите...

зы
если ошибся разделом, перенисите куда надо...
ззы
моя <<попытка>> решения в прекреплённом файле(в названии файла удалите <<.txt>>)
Прикрепленный файл  b.bat.txt ( 521 байт ) Кол-во скачиваний: 486

Автор: volvo 17.02.2008 2:04

Вот тут - все, что может понадобиться для работы с датами/временем из BAT-файлов: http://www.robvanderwoude.com/datetiment.html

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

Автор: compiler 17.02.2008 3:11

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

Код
@echo off

IF %Date%==20.02.2008 (
    echo 0
    goto end
)

IF %Date%==19.02.2008 (
    echo 1
    goto end
)

IF %Date%==18.02.2008 (
    echo 2
    goto end
)

IF %Date%==17.02.2008 (
    echo 3
    goto end
)

IF %Date%==16.02.2008 (
    echo 4
    goto end
)

:end

однако, если выводить скриптом
Код
echo var WSHShell = WScript.CreateObject("WScript.Shell"); > %temp%\mes.js
echo WSHShell.Popup("твой_текст"); >> %temp%\mes.js
start %temp%\mes.js
deltree /y %temp%\mes.js
возникают проблеммыsad.gif

что делать?

Автор: volvo 17.02.2008 3:48

Цитата
возникают проблеммы
Какие проблемы? Ты о том, что deltree - не будет распознаваться? Или о том, что не выводится то, что нужно?

Автор: compiler 18.02.2008 0:28

Цитата(volvo @ 16.02.2008 22:48) *
Какие проблемы?
я не понимаю что происходит..
Код
@echo off

echo var WSHShell = WScript.CreateObject("WScript.Shell"); > %temp%\mes.js
echo WSHShell.Popup("text1"); >> %temp%\mes.js
start %temp%\mes.js
deltree /y %temp%\mes.js

rem сегодня 17.02.2008
IF %Date%==16.02.2008 (
    echo var WSHShell = WScript.CreateObject("WScript.Shell"); > %temp%\mes.js
    echo WSHShell.Popup("text2"); >> %temp%\mes.js
    start %temp%\mes.js
    deltree /y %temp%\mes.js
)

приводит к появлению двух сообщений text1 и двух text2, а хотелось бы одно text1, так как во втором случае условие не выполняется(?).. да и в консоли появляются следующие собщения "deltree" не является внутреней или внешней командой, исполнеемой программой или пакетным файлом

Автор: volvo 18.02.2008 2:22

Смотри:

@echo off

echo var WSHShell = WScript.CreateObject("WScript.Shell"); > %temp%\mes.js
echo WSHShell.Popup("text1"); >> %temp%\mes.js
rem Запускаем скрипт и ждем его завершения
start /wait %temp%\mes.js
rem И только потом удаляем файл
del %temp%\mes.js

rem Здесь - берем сегодняшнюю дату: из %date% 10 символов, начиная с четвертого
set myToday=%date:~4,10%
IF "%myToday%"=="02/16/2008" (
rem Если встречается закрывающаяся скобка - ее надо экранировать: ^)
echo var WSHShell = WScript.CreateObject("WScript.Shell"^); > %temp%\mes.js
rem Здесь - тоже экранируем
echo WSHShell.Popup("text2"^); >> %temp%\mes.js
start /wait %temp%\mes.js
del %temp%\mes.js
)


Добавлено через 6 мин.
Заметь, формат даты должен совпадать с системным...

Автор: compiler 18.02.2008 2:51

спасибо!

>>Заметь, формат даты должен совпадать с системным...
вот... можно ли написать скрипт который работал бы на всех машинах(под управлением win XP) корректно? Так у меня результатом echo %date% будет 17.02.2008. Или где про это можна почитать?

Автор: volvo 18.02.2008 3:14

Вот тут лежит пример батника, который читает информацию из реестра, и разбивает системную дату на День, Месяц и Год... Посмотри, как это делается...

http://www.prombox.com/andreev/files/nt_batch/cutdate.zip

Вроде автор говорил, что это должно работать на любой NT-системе, за исключением NT4...

Автор: compiler 18.02.2008 3:19

Цитата(volvo @ 17.02.2008 22:14) *
Вот тут лежит пример батника
спасибо... будем смотретьsmile.gif

Автор: compiler 19.02.2008 22:17

Добрый день!
А какие средства отладки существует для обработки батников? Хотелось бы хотя бы узнавать строку в которой происходит ошибка....

и еще где можна почитать подробней об экранировании скобок?

заранее благодарен.

Автор: andriano 20.02.2008 0:41

отлаженный батник первой строкой имеет:
@echo off
неотлаженный - еще не имеет.
Других средств отладки не предусмотрено.
Да, в принципе, для интерпретатора они и не нужны.

Автор: volvo 20.02.2008 1:00

Цитата
и еще где можна почитать подробней об экранировании скобок?
Вообще неплохо было бы прочитать http://rsdn.ru/article/winshell/batanyca.xml yes2.gif

Автор: compiler 20.02.2008 1:10

Цитата(volvo @ 19.02.2008 20:00) *
Вообще неплохо было бы прочитать http://rsdn.ru/article/winshell/batanyca.xml yes2.gif
спасибо, будем читать... ух не люблю я биологию;)
Цитата
Других средств отладки не предусмотрено.
Да, в принципе, для интерпретатора они и не нужны.
другим может они и не нужны, но мне, на данном этапе, не очень приятно расставлять echo some_text что б увидить где остановился скрипт... в любом случае теперь смогу отличить отлаженный _чужой_ батник от не отлаженного...

Автор: andriano 20.02.2008 23:03

Прежде чем делать выводы, запусти батник без echo off. Сразу поймешь в чем дело. ;)