Здравствуйте, adontz, Вы писали:
A>Здравствуйте, Алексей Александров, Вы писали:
A>Я почему-то думал, что для серьёзных вещей есть VBScript + WSH
Спору нет. Для еще более серьезных вещей есть еще более серьезные языки. Мне вот Перл нравится (правда, его к сожалению в Виндах нет по умолчанию). Но целью было не показать, как можно решать задачи на других языках, а как можно решать эти задачи лучше на командном языке.
It's kind of fun to do the impossible (Walt Disney)
Здравствуйте, adontz, Вы писали:
A>Я почему-то думал, что для серьёзных вещей есть VBScript + WSH
Но по VBScript нет встроенной в винду документации. Я вот никак не соберусь найти эти доки в инете и сидеть разбираться. Проще или bat файл написать, или консольное приложение.
Где, кстати, можно наиболее полную документацию найти, в библиотеке MSDN, насколько я понимаю?
АА>Авторы: АА> Алексей Александров
АА>Аннотация: АА>Статья рассказывает о малоизвестных возможностях командного языка Windows.
Мне еще не посчастливилось прочитать вашу статью и пока не знаю есть ли там ответ на интересующий меня вопрос. Поэтому, если не трудно ответить, у меня проблема.
Есть ли комманда аналогичная функции Sleep(timeout) ?
Или как ее можно реализовать с помощью батцч комманд ?
Кстати.
Вот написанный на bat-файле сканер сети на предмет расшаренных ресурсов.
Работает всё только под Windows 2000 и выше (да и обязательно под английской, иначе там надо будет скорее всего магическую строчку поменять).
Результаты выводятся в stdout.
Ну и вообще как пример может кому пригодится.
@echo off
if .%scan_run%.==.. goto set_delayed_env
call :comp_list >$temp1$.txt
for /f %%a in ($temp1$.txt) do (
call :dump_comp %%a
)
del $temp1$.txt
goto end
:comp_list
net view|find "\\"
goto end
:dump_comp
set comp_to_scan=%1
net view %comp_to_scan%|find "Disk">$temp2$.txt
for /f "tokens=*" %%a in ($temp2$.txt) do (
set stemp=%%a
set stemp=!stemp:~0,-24!
dir /b /s %comp_to_scan%\!stemp!
)
del $temp2$.txt
goto end
:set_delayed_env
set scan_run=true
cmd.exe /v:on /c %0
:end
Здравствуйте, Donz, Вы писали:
OE>> сначала №1 до конца D>Это в смысле просьба к людям, или констатация факта, что сначала №1, а потом батаника (надпись админ несколько смутила)?
А вот один из способов сделать upcase строки (проверено только под Windows XP).
Русские символы должны быть в DOS-кодировке.
@echo off
set str_to_upcase=this is a test (проверка)
find "dummy" "1:\%str_to_upcase%" >$temp$.txt 2>&1
for /f "delims=\ tokens=1,2*" %%a in ($temp$.txt) do set str_result=%%b
del $temp$.txt
echo %str_to_upcase%
echo %str_result%
Здравствуйте, Donz, Вы писали:
D>Здравствуйте, adontz, Вы писали:
A>>Я почему-то думал, что для серьёзных вещей есть VBScript + WSH
D>Но по VBScript нет встроенной в винду документации. Я вот никак не соберусь найти эти доки в инете и сидеть разбираться. Проще или bat файл написать, или консольное приложение. D>Где, кстати, можно наиболее полную документацию найти, в библиотеке MSDN, насколько я понимаю?
Не оюязательно, на сайте M$ есть, ищи "scrdoc56en.exe" , кстати у них ещё есть "System Administration Scripting Guide
Script Repository"(netscrpt.exe) достаточно большой репозитарий готовых скриптов на разные случаи жизни, но всё одно для меня Python рулит, когда надо біло послать "magic packet" серверу для включения(Wake-On-Lan) в определённое время(Ну поскупились почему-то инженеры Интела на включение этой опции в БИОС мамки), то он помог решить эту задачу самой меншей кровью, всего 10 строчек и никаких дополнительных програм кроме самого Питона, который итак стоял на машине(Кстати будто есть ещё способ через WMI разбудить машину, но он почему-то не отрабатывал).
АА>Статья рассказывает о малоизвестных возможностях командного языка Windows.
Хорошая статья. Первой мыслью после прочтения названия было, а кому оно нужно, ведь для себя я давно уже выбрал
Python, sh(Cygwin), WSH(JS) в порядке убывания важности, но всё таки иногда быстрее использовать *.cmd (cmd я называю как раз потому,
что в 98-й командный и язык и интерпритатор были достаточно убогим ну и cmd расширение в 98-й не распознавалось как испольнительное, єто уходит корнями, когда я ещё держал 2 операционных на машине и для различения для какой винды скрипты).
Автор по сути привёл именно использование в тех случаях,когда быстрее использовать *.cmd , а для меня
единственный случай когда я запускаю батники,
это для передачи кучи дополнительных опций для nmake, bjam и других или для того чтобы Питон использовал
ту же консоль из какой я его запускаю и опять же для передачи ему дополнительных параметров.
Опасайтесь бездумного применения команды cd %~dp0 без проверки результата выполнения. Теоретически, эта команда должна сменить текущий каталог на каталог, в котором расположен командный файл. Как правило, это работает.
--
Небольшой комментарий к этому тексту из статьи.
Если путь каталога содержит имя диска (как в этом случае), то желательно к аргументам команды cd добавить ключ /d, так как без него эта команда диск не сменит.
Здравствуйте, Геннадий Майко, Вы писали:
ГМ>Здравствуйте, Алексей Александров,
ГМ>ПРЕДУПРЕЖДЕНИЕ
ГМ>Опасайтесь бездумного применения команды cd %~dp0 без проверки результата выполнения. Теоретически, эта команда должна сменить текущий каталог на каталог, в котором расположен командный файл. Как правило, это работает. ГМ>-- ГМ>Небольшой комментарий к этому тексту из статьи. ГМ>Если путь каталога содержит имя диска (как в этом случае), то желательно к аргументам команды cd добавить ключ /d, так как без него эта команда диск не сменит.
Точно. Забыл про это.
It's kind of fun to do the impossible (Walt Disney)
Re[3]: Урок bat-аники
От:
Аноним
Дата:
17.02.06 22:03
Оценка:
Уважаемый ALL!
Помогите советом.Нужно архивировать базу под ДОС 6.2.Главное чтобы менять по желанию период.Как лучше сделать скриптовый язык и батник.Лучше ссылку наготовый скрипт,потому как времени нет.
Заранее благодарен.
Re[4]: Урок bat-аники
От:
Аноним
Дата:
18.02.06 08:31
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Уважаемый ALL! А>Помогите советом.Нужно архивировать базу под ДОС 6.2.Главное чтобы менять по желанию период.Как лучше сделать скриптовый язык и батник.Лучше ссылку наготовый скрипт,потому как времени нет. А>Заранее благодарен.
Что значит менять период?
Дату/время создания архива или вставить дату в имя архива?
Re[5]: Урок bat-аники
От:
Аноним
Дата:
18.02.06 10:33
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>>Уважаемый ALL! А>>Помогите советом.Нужно архивировать базу под ДОС 6.2.Главное чтобы менять по желанию период.Как лучше сделать скриптовый язык и батник.Лучше ссылку наготовый скрипт,потому как времени нет. А>>Заранее благодарен.
А>Что значит менять период? А>Дату/время создания архива или вставить дату в имя архива?
Нужно иметь две копии одну ежедневную другую например недельной давности или пятидневной.Этот период выбирается произвольно.При этом юзер всегда жмет только одну клавишу.
Re: Урок bat-аники
От:
Аноним
Дата:
01.08.06 11:34
Оценка:
Здравствуйте, Алексей Александров, Вы писали:
Получается что так
rem "%~d1\microsoft\technet\files\WindowsXP-KB917537-x86-ENU.exe"
set pt = %~d1\microsoft\technet\files\
"%pt%WindowsXP-KB917537-x86-ENU.exe"
сделать не получится?
Re[2]: Урок bat-аники
От:
Аноним
Дата:
01.08.06 11:56
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Алексей Александров, Вы писали:
А>Получается что так А>
@echo off
if "%~1"=="" (
echo Usage:
echo %~n0 a.b.c.d
echo %~n0 a b c d
echo.
echo Performs a reverse lookup on IP a.b.c.d.
goto :EOF
)
if "%~4"=="" (
for /F "usebackq tokens=1,2,3,4 delims=." %%a in ('%1') do call :doit %%d.%%c.%%b.%%a
) else (
call :doit %4.%3.%2.%1
)
goto :EOF
:doit
nslookup -type=PTR %1.in-addr.arpa
Здравствуйте, Roman Odaisky, Вы писали:
RO>На .bat'ах Quine делаются и проще
Да это весьма оригинальное решение
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1251"></HEAD>
<BODY><PRE></PRE></BODY></HTML>
Значит понадобилось усыпить исполнение на некоторое время.
Команды такой по умолчании нет.
Найденые варианты
1. sleep.exe из Windows Resource Kit
2. ping
ping -n [timeout] -w 1 localhost > nul
timeout в секундах
3. WScript.sleep
ECHO WScript.sleep(1000); > %temp%\sleep.js
cscript %temp%\sleep.js
IF EXIST %temp%\sleep.js DEL /Q %temp%\sleep.js
здесь таймаут указывается в мс WScript.sleep([timeout])
4. Обычный цикл
for /L %%b in (1,1,20000) Do @Echo %%b > Nul
тут все подбирается экспериментально.
Какие кто знает ещё варианты?
Да работоспособность на разных вариантах многоликой ОС MS Windows не исследовалась, так как нужна работа только под XP.
ЗЫ: маленький этюдик такой
Здравствуйте, UFB, Вы писали:
RO>>На .bat'ах Quine делаются и проще
UFB>Да это весьма оригинальное решение UFB>
UFB><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
UFB><HTML><HEAD>
UFB><META http-equiv=Content-Type content="text/html; charset=windows-1251"></HEAD>
UFB><BODY><PRE></PRE></BODY></HTML>
UFB>
Это overservice Надо было сделать просто Content-Type: text/plain
Даже не знаю, в какой форум писать, по этому пишу здесь:
Есть ли возможность перенаправить стандартный вывод в файл в формате Unicode (например, dir >…)?
Дело в том, что вывод в консоль точно идет в Unicode, но для этого надо установить соответствующий шрифт (Lucida Console например), а сохранить в первоначальном виде в файл это не удается…
Что-бы перенаправить вывод в stderr (т.е. сообщений об ошибках), надо использовать 2>filename (2>>filename) либо 2>&1 если хотите перенаправить stderr туда-же куда и основной, т.е. записи
Здравствуйте, Аноним, Вы писали:
А>Что-бы перенаправить вывод в stderr (т.е. сообщений об ошибках), надо использовать 2>filename (2>>filename) либо 2>&1 если хотите перенаправить stderr туда-же куда и основной, т.е. записи А>
echo hellow >>log.txt 2>>log.txt
и
echo hellow >>log.txt 2>&1
равносильны.
Предлагаю сначала пробовать самому, а потом рекомендовать:
> cmd.exe /c echo hello 1>111 2>111
The process cannot access the file because it is being used by another process.
Ответ на вопрос почему так происходит оставлен в качестве упражнения читателю
It's kind of fun to do the impossible (Walt Disney)
Здравствуйте, Roman Odaisky, Вы писали:
RO>Здравствуйте, wildwind, Вы писали: W>>Не понял ответа (если это был ответ). RO>И правда, ответ потерялся... RO>Это предполагался вопрос: как?
О, только заметил! Во избежание дальнейших недоразумений уточним контекст. Итак, вы спрашиваете, как с помощью nslookup выполнить обратный просмотр, не формируя вручную имени в обратной зоне, верно?
Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.
D:\Temp>nslookup -type=ptr 194.67.57.26
Server: dc2.xxx.xxxxx.ru
Address: x.x.x.100
Non-authoritative answer:
26.57.67.194.in-addr.arpa name = mail.ru
D:\Temp>
Таким образом, ваш reverse.cmd можно несколько упростить.
АА>Авторы: АА> Алексей Александров
АА>Аннотация: АА>Статья рассказывает о малоизвестных возможностях командного языка Windows.
Хорошая статья. Только не о командном языке Windows.
Командный язык Windows — это Windows script host, то есть Visual Basic
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Командный язык Windows — это Windows script host, то есть Visual Basic
WSH не может быть командным языком хотя бы в силу отсутствия возможности интерактивной работы с ним. Сейчас православный командный язык windows — это powershell