Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 3

Автор: igor_andreev
Дата сообщения: 11.05.2007 13:45
KapralBel
Лучше вот эту choice.exe из Win2000 Resource Kit, choice.zip , синтаксис такой-же.
По возможности в XP надо использовать 32-битные утилиты, а не древнючие 16-битные com-файлы.
Автор: KapralBel
Дата сообщения: 11.05.2007 13:54
igor_andreev
Да мне она и не нужна... у меня никогда не бывает интерактивных батничков...
А только параметры, параметры, параметры....
Автор: igor_andreev
Дата сообщения: 11.05.2007 14:03
Smarsh

Цитата:

Цитата: Цитата:как мне получить имя активного сетевого подключения?


Вопрос остается открытым...
Автор: GORA2
Дата сообщения: 11.05.2007 14:29
KapralBel
igor_andreev
Спасибо конечно, но как я понял это будет консольное окно? У меня консольное окно скрыто и интерфейс с пользователем (если это можно так назвать) организован через утилиту nircmdc. А там только окна с одной или двумя кнопками. Ну здесь будет три выбора. Не подходит мне это. Мне бы как без окон передать информацию в батник. Может есть какая то консольная утилитка слежения за клавиатурой?
Автор: KapralBel
Дата сообщения: 11.05.2007 14:41
GORA2
Т.е. тебе не надо интерактивный батничек
Тогда вызывай его так
www.cmd l1
www.cmd l2
и т.д.
а сам батничек

Код:
@Echo Off
GoTo :%1
GoTo :EOF

:l1
список действий в 1-м случае
GoTo :EOF

:l2
список действий в 2-м случае
GoTo :EOF
Автор: GORA2
Дата сообщения: 11.05.2007 16:10
KapralBel

Цитата:
Варианты его работы (упаковка/распаковка/показ диалоговых окон и т.д.) определяются типами и содержимым файлов выбранных на панели ТС.
Т.е. ТС передает в батник список файлов, а мне надо еще добавить туда информацию о нажатой клавише. Видимо я плохо объяснил.
Спасибо за помощь, решение нашел (написали мне утилитку для опроса спец клавиш). Буду прилаживать
Автор: Den_Klimov
Дата сообщения: 11.05.2007 16:38
Кто-нибудь просветите плиз.. очень нужно..

Чем между собой различаются эти два батника?

C:\RadminServer\RadminServer.msi /quiet
REGEDIT.exe /S "C:\RadminServer\-Port.reg"
REGEDIT.exe /S "C:\RadminServer\-Radmin Security.reg"
REGEDIT.exe /S "C:\RadminServer\+Port.reg"
REGEDIT.exe /S "C:\RadminServer\+Radmin Security.reg"
"C:\windows\system32\rserver30\RServer3.exe" /stop
"C:\windows\system32\rserver30\RServer3.exe" /start
exit

start /wait C:\RadminServer\RadminServer.msi /quiet
start /wait REGEDIT.exe /S "C:\RadminServer\-Port.reg"
start /wait REGEDIT.exe /S "C:\RadminServer\-Radmin Security.reg"
start /wait REGEDIT.exe /S "C:\RadminServer\+Port.reg"
start /wait REGEDIT.exe /S "C:\RadminServer\+Radmin Security.reg"
"C:\windows\system32\rserver30\RServer3.exe" /stop
"C:\windows\system32\rserver30\RServer3.exe" /start
exit

В чём сакраментальная разница наличия start /wait?
Результат выполнения вроде ж одинаковый..
Ведь насколько я понимаю.. при выполнении батника, пока не выполнена предыдущая команда, команда следующая за ней не выполнятеся.. Так?

Я чего-то не доганяю? Наверное смысла команды start.. для чего она вообще может пригодиться?
Автор: slayer120
Дата сообщения: 11.05.2007 16:55
Den_Klimov


Цитата:
Ведь насколько я понимаю.. при выполнении батника, пока не выполнена предыдущая команда, команда следующая за ней не выполнятеся.. Так?

Не так ты понимаешь. Боюсь что если тебе надо дождаться завершения
длительной работы проги а после запустить следующую, и wait не всегда
помогает. Я в свое время когда сталкивался с подобной проблемой
решал ее так - периодически выводил список задач (tasklist) в файл и
сканил, если проги там нет пускал следующую. метод 100 % рабочий.
Мне wait тогда не помог.
Автор: Maza Faka
Дата сообщения: 11.05.2007 18:09
Den_Klimov
slayer120
Вообще-то, ключ "/wait" нужен для того, что бы дождаться окончания работы приложения, а потом запустить следующую команду...
Например я запускаю дефрагментацию диска на ночь и ухожу спать, машина вырубится по окончании дефрагментации:

Код:
@Echo off
Start /wait Defrag D:
Shutdown -s -f
Автор: InSe0F
Дата сообщения: 11.05.2007 21:10
Maza Faka
дык у мну скрипт этот каждые 10 минут повторяется, он там кучу всего проверяет
почему бы и не проверять время?
лучше скажи что я там неправильно написал, а то чтот не работает


Код:
:_1
rem делаем паузу (600 ~ 10минут - время паузы в секундах)
sleep 600

rem проверяем скоко времени?
if %var_time%==18 (
//////запускаем скипт
%var_time%=0
) else ( %var_time% = %var_time% + 1 )

goto _1
Автор: Elroir
Дата сообщения: 11.05.2007 22:37
InSe0F

Код:
set "var_time=0"
:_1
rem делаем паузу (600 ~ 10минут - время паузы в секундах)
sleep 600

rem проверяем скоко времени?
if %var_time%==18 (
//////запускаем скипт
set "var_time=0"
) else ( set /a var_time+=1)

goto _1
Автор: InSe0F
Дата сообщения: 11.05.2007 23:14
Elroir
РЕСПЕКТ

ааа, блин, балбес я
Автор: GORA2
Дата сообщения: 12.05.2007 07:49
Здравстуйте всем!
1 Можно ли избавиться от переменной tempi в приведенном ниже примере?
Код: setlocal enabledelayedexpansion
FOR /F "eol=; delims== tokens=1,2" %%i IN (Settings.ini) DO (
    set tempi=%%i
    IF "!tempi:~0,1!"=="-" (
        IF "!tempi:~2,1!"=="v" (set copir=!copir! !tempi:~0,4!%%j) ELSE (set copir=!copir! !tempi:~0,4!"!tempi:~4!=%%j")
    ) ELSE (set %%i=%%j)
)
Автор: Maza Faka
Дата сообщения: 12.05.2007 09:43
GORA2

Цитата:
Можно ли избавиться от переменной tempi

В смысле избавиться? Присвоить пустое значение? Тогда так
Код: Set tempi=
Автор: GORA2
Дата сообщения: 12.05.2007 09:56
Maza Faka

Цитата:
В смысле избавиться? Присвоить пустое значение?
Нет. Как в приведенном мной коде НЕ использовать эту переменную, а производить "обрезание" непосредственно переменной %%i. Какой при этом должен быть синтаксис записи?
Цитата:
"Помните, что оператор else всегда ссылается на ближайший
оператор if, который находится в том же блоке, что и опе-
оператор else, и не сопоставлен другому оператору else.
А что, у меня там что то не так? Вроде все работает как задумано!?
Цитата:
Set /? Там всё подробно описано.
Спасибо. Столько раз вроде смотрел, но не увидел .
Собственно вопрос вот в чем?
Цитата:
После прекрашения процесса Name_SFX_Archive, бипы прекращаются, но в консольном окне вижу быстрое прокручивание оставшейся части цикла. Почему так происходит?







Добавлено:
И еще вопрос. Запускаю батник:
Код: @echo off
echo %%0    = %0
echo %%~0    = %~0
echo %%~f0    = %~f0
echo %%~s0    = %~s0
echo %%~d0    = %~d0
echo %%~p0    = %~p0
echo %%~n0    = %~n0
echo %%~x0    = %~x0
echo %%~a0    = %~a0
echo %%~t0    = %~t0
echo %%~z0    = %~z0
echo %%~dp0    = %~dp0
echo %%~nx0    = %~nx0
echo %%~sn0    = %~sn0
echo %%~sx0    = %~sx0
echo %%~snx0    = %~snx0
echo %%~ftza0    = %~ftza0
pause>>nul
Автор: Maza Faka
Дата сообщения: 12.05.2007 12:07
GORA2

Цитата:
Как в приведенном мной коде НЕ использовать эту переменную, а производить "обрезание"

Как я понял, тебе нужны 4 переменные содержащие "куски" переменной "%%j"?
Что-то вроде такого:

Код:
Set tempi1=!tempi:~0,1!
Set tempi2=!tempi:~2,1!
Set tempi3=!tempi:~0,4!
Set tempi4=!tempi:~4!
Автор: GORA2
Дата сообщения: 12.05.2007 12:17
Maza Faka
Я не знаю как "обрезать" переменные цикла FOR, например, %%i. Как ее можно обрезать? Из-за этого и ввел временную переменную !tempi! с которой и делаю все процедуры обрезания. Все у меня в приведенном куске кода работает, но мучает вопрос: что же без временной переменной не обойтись? Нельзя как нибудь обрезать саму переменную цикла (а не временную переменную) и использовать ее куски в данном примере? Вот и весь вопрос . Может мне лучше Вам в аську стукнуть?
Автор: Maza Faka
Дата сообщения: 12.05.2007 13:12
GORA2

Цитата:
Я не знаю как "обрезать" переменные цикла FOR, например, %%i. Как ее можно обрезать?

Никак, придётся использовать временную переменную. А, что это так критично использовать лишнюю переменную?
Автор: GORA2
Дата сообщения: 12.05.2007 13:16
Maza Faka
Цитата:
А, что это так критично использовать лишнюю переменную?
Нет. Не критично, просто хотел знать - можно или нет. Теперь знаю ,благодаря Вам.
А по вопросам 3 и 4 не подскажите ни чего?
Автор: Maza Faka
Дата сообщения: 12.05.2007 14:30
GORA2

Цитата:


Код:
FOR /L %%j IN (1000,-1,1) DO nircmdc cmdwait 850 beep 50 20 & tasklist | find /i "Name_SFX_Archive">nul || GOTO forsequit
:forsequit

После прекрашения процесса Name_SFX_Archive, бипы прекращаются, но в консольном окне вижу быстрое прокручивание оставшейся части цикла. Почему так происходит?
Автор: presston
Дата сообщения: 13.05.2007 18:43
Здравствуйте.

У меня такая проблемка. Есть удаленный Ip ххх.ххх.ххх.ххх

Мне нужно его пинговать 1 раз в 10 секунд ( не чаще) на наличие сети.
Подскажите как засунуть это в бат файл) спасибо
Автор: igor_andreev
Дата сообщения: 13.05.2007 19:04

Цитата:
Вопрос: от куда берется лишняя буква "t" в расширении файла в переменных %~s0 и %~snx0 ???

Не смог у себя изобразить такое Короткие имена включал-выключал, перезагружался... А если *.bat переименовать в *.cmd, то показывает *.cmdd?
Автор: Elroir
Дата сообщения: 13.05.2007 19:12
igor_andreev

Цитата:
Не смог у себя изобразить такое

Вот и у меня не получилось . Я тоже экспериментировал, но такого не добился.

Добавлено:
presston

Код:
@echo off
:try
ping -n 1 ххх.ххх.ххх.ххх | find /i "TTL=">nul
if %errorlevel%==0 (
echo Working
) else (
echo Not working
)
ping -n 11 -w 1000 127.0.0.1>nul
goto try
Автор: wolf0425
Дата сообщения: 13.05.2007 20:04
igor_andreev

Цитата:
Не смог у себя изобразить такое Короткие имена включал-выключал, перезагружался...

воспроизведи точно путь, по которому лежит батник - "D:\totalcmd\Utilites\Create SFX\архив\"
добавление циферок к имени "архив" не мешает воспроизведению бага, убираю из слова одну буковку - повторяться перестает. мистика.

ps: xp eng sp2, NTFS, короткие имена включены.


Добавлено:

Цитата:
А если *.bat переименовать в *.cmd, то показывает *.cmdd?

да, а как ты догадался?
влияния имени/расширения батника на воспроизведение бага не обнаружено
Автор: trigliff
Дата сообщения: 13.05.2007 20:40
Как гарантированно запустить сетевое подключение? Иногда получается так, что rasdial отрабатывает, а подключение не запустилось. Тут его запустить бы ещё разок, да только некому
Автор: presston
Дата сообщения: 13.05.2007 20:42
Elroir


Цитата:
@echo off
:try
ping -n 1 ххх.ххх.ххх.ххх | find /i "TTL=">nul
if %errorlevel%==0 (
echo Working
) else (
echo Not working
)
ping -n 11 -w 1000 127.0.0.1>nul
goto try



пасиба) а можно расписать чуть подробнее? (т.е. что для чего мы делаем)



Автор: igor_andreev
Дата сообщения: 13.05.2007 21:02
wolf0425

Цитата:
воспроизведи точно путь

Точно, не подумал.

Цитата:
xp eng sp2, NTFS, короткие имена включены.

Аналогично

Прикольнейший глюк, есть над чем подумать. Он с таким путем не понимает почему-то свое собственное короткое имя(%~sx0), выдает полное. Должно быть A7BA~1.CMD(если "преобразование переменных.cmd") или 4FAB~1.BAT(если "преобразование переменных.bat")


Цитата:
да, а как ты догадался?

А сталкивался однажды с похожим написанием, у меня одна переменная пропадала. В похожей конструкции
%%~sx0 = %~sx0
у мну хитрый батник самовольно брал то, что между жирными знаками процента и издевался надо мной. Но там команда у меня SET фигурировала, здесь что-то похожее, но не то. Даже если все знаки "=" поубирать - глючит. Берется последняя буква расширения (~-1) и прибавляется, а в каком месте еще не понял.
Автор: NIKZZZZ
Дата сообщения: 13.05.2007 21:06
trigliff


Код: @echo off
setlocal
set flag=No
:_1
rasdial соединение
for /f "tokens=1* delims=" %%a in ('ipconfig ^| find "соединение"') do set "Flag=Yes"
if %Flag%=No goto _1
Автор: Elroir
Дата сообщения: 13.05.2007 21:20
presston

Цитата:
а можно расписать чуть подробнее?

Можно
1. @echo off - не показыватю запускаемые команды
2. :try - метка для возврата
3. ping -n 1 ххх.ххх.ххх.ххх | find /i "TTL=">nul - пингуем адрес и проверяем прошел ли пинг
4. if %errorlevel%==0 ( - если прошел (проверяем код возврата)
5. echo Working - выводим "Working"
6. ) else ( - если нет
7. echo Not working - выводим "Not working"
)
8. ping -n 11 -w 1000 127.0.0.1>nul - пауза 10 сек. Пингуем свой комп 11 раз - примерно 10 сек.
9. goto try - возвращаемся к метке "try"
Автор: igor_andreev
Дата сообщения: 13.05.2007 21:34
wolf0425
Смог повторить глюк с
D:\New Folder\New Folder\f sfx\test\преобразование переменных.bat
D:\oops\test test\p sfx\test test\преобразование переменных.bat
...
Кажется cmd.exe в определенных сочетаниях коротких имен не очень нравятся идущие после пробела в пути буквы sfx, он оттуда откуда-то последнюю букву расширения (~x) прихватывает.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: Автозагрузка терминальной сессии


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.