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

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

Автор: lorents
Дата сообщения: 10.07.2010 17:58
wolf0425

Цитата:
ветвление делается тупо так:

спасибо, теперь осталось решить с кириллицей
Автор: kostyamks
Дата сообщения: 10.07.2010 18:09
ComradG
res2001

Спасибо выручили.
Автор: wolf0425
Дата сообщения: 10.07.2010 18:16

Цитата:
спасибо, теперь осталось решить с кириллицей
да подсунуть короткое имя и успокоиться.


Код: @echo off
chcp 1251
call :info кирилица.png
exit

:info
T:\2\ImageMagick-6.6.3-0\convert.exe %~s1 -format "%%A" info: |find /i "false" >nul && echo No Alpha channel
exit /b
Автор: nemoW
Дата сообщения: 10.07.2010 19:18
Добрый день.
Я хочу написать скиптик, который будет проверять наличие интернет-соединения и IP-адрес, и в зависимости от этого совершать различные действия.
Алгоритм примерно такой:
1. Если определенного интернет-соединения (VPN) нет, установить его.
2. Запомнить IP интернет-соединения.
3. "Заснуть" на определенный срок (пауза).
4. По истечении паузы проверить, есть ли интернет-соединение.
5. Если интернет-соединения нет, установить его.
6. Сравнить IP интернет-соединения с предыдущим (из п.2).
7. Если IP изменился, совершить определенное действие.
Переход к п.2.

Основная загвоздка - как получить IP адрес определенного соединения? Увы, я не программист и С++ с WinAPI не владею. Можно ли реализовать это на простых скриповых языках?

UPD: нашел программку, которая копирует внешний IP в буфер обмена. Задача упрощается.
Автор: lorents
Дата сообщения: 10.07.2010 19:38
wolf0425
При тестировании твоего batch выдает

Цитата:
convert.exe: Improper image header `C:\кирилица.png' @ error/png.c/ReadPNGImage/3078.
convert.exe: missing an image filename `info:' @ error/convert.c/ConvertImageCommand/2970.
Автор: wolf0425
Дата сообщения: 10.07.2010 21:23

Цитата:
При тестировании твоего batch выдает
закомментарь @echo off и напиши какие ключики у команды выдаст.
и то же самое с именем на символ длиннее.

ты точно копипастом ключики копировал, ничего не напутал? у меня - работает.


Автор: res2001
Дата сообщения: 10.07.2010 21:42
nemoW
То что ты хочешь сделать вполне можно реализовать на батниках.
Установить соединение можно с помощью rasdial, узнать IP соединения можно сканируя вывод ipconfig /all.
Автор: lorents
Дата сообщения: 10.07.2010 22:58
wolf0425

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

странно, вроде бы я ничего не напутал. с кириллицей работает.

Цитата:
C:\>rem @echo off

C:\>chcp 1251
Текущая кодовая страница: 1251

C:\>call :info Я.png

C:\>convert.exe C:\Я.png -format "%A" info: | find /i "false" 1>nul && echo No Alpha channel
convert.exe: Improper image header `C:\Я.png' @ error/png.c/ReadPNGImage/3078.
convert.exe: missing an image filename `info:' @ error/convert.c/ConvertImageCommand/2970.

C:\>exit /b

C:\>pause
Для продолжения нажмите любую клавишу . . .


Цитата:
C:\>rem @echo off

C:\>chcp 1251
Текущая кодовая страница: 1251

C:\>call :info Ты.png

C:\>convert.exe C:\Ты.png -format "%A" info: | find /i "false" 1>nul && echo No Alpha channel
convert.exe: Improper image header `C:\Ты.png' @ error/png.c/ReadPNGImage/3078.
convert.exe: missing an image filename `info:' @ error/convert.c/ConvertImageCommand/2970.

C:\>exit /b

C:\>pause
Для продолжения нажмите любую клавишу . . .
Автор: nemoW
Дата сообщения: 11.07.2010 02:36
res2001
А как вырезать из выдачи ipconfig нужный кусок?
Автор: wolf0425
Дата сообщения: 11.07.2010 08:50
lorents
Цитата:
странно, вроде бы я ничего не напутал. с кириллицей работает.
очень странно - у тебя %~s1 в русской кодировке, у меня - обычно в английской. хотя с Я.png - та же фигня что у тебя.
ну и когда я просил на символ длиннее - я имел в виду на символ длиннее чем у предыдущего примера (кирилица), а не в два символа ... ладно, проехали.

чего с этим кривым convert.exe делать то...
кроме временного переименовывания/копирования картинки в английское имя - в голову ничего уже не приходит.
сам напишешь, надеюсь?

nemoW

Цитата:
res2001
А как вырезать из выдачи ipconfig нужный кусок?
пропустить вывод через findstr .
а вообще - поищи rasdial поиском по версии для печати, может найдешь похожий пример.
Автор: res2001
Дата сообщения: 11.07.2010 09:55
nemoW

Цитата:
А как вырезать из выдачи ipconfig нужный кусок?

Если сам не сможешь давай сюда вывод ipconfig и имя подключения, помогу.
Автор: lorents
Дата сообщения: 11.07.2010 09:57
wolf0425

Цитата:
кроме временного переименовывания/копирования картинки в английское имя - в голову ничего уже не приходит.

у меня эта же идея было, я сейчас спросил на их официальном форуме, подожду, может кто подскажет
Автор: wolf0425
Дата сообщения: 11.07.2010 10:06

Цитата:
я сейчас спросил на их официальном форуме, подожду, может кто подскажет
а чего спросил то?
почему утилита неадекватно реагирует на неамериканское имя файла, или ещё что?
явный же баг...
Автор: lorents
Дата сообщения: 11.07.2010 10:16
wolf0425
а спросил, как заставить, чтобы он работал с кириллицей.


Цитата:
явный же баг...

может баг, а может сделано специально

сейчас копался в интернете, и там совет попробовать использовать Unicode (UTF-8)
как это можно сделать?
Автор: mugil_cephalus
Дата сообщения: 11.07.2010 11:09
BVV63

Цитата:
Код:setlocal enabledelayedexpansion
set "cnt=1"
for /f "tokens=3" %%a in ('reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management" /v PagingFiles ^|more +4') do (
set "PagingFiles!cnt!=%%~a"
set /a cnt=!cnt!+1
)
set PagingFiles
pause

у меня все работает
листинг
[more=link]


G:\scripts\TEST>setlocal enabledelayedexpansion

G:\scripts\TEST>set "cnt=1"

G:\scripts\TEST>for /F "tokens=3" %a in ('reg query "HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management" /v PagingFiles |mor
e +4') do (
set "PagingFiles!cnt!=%~a"
set /a cnt=!cnt!+1
)

G:\scripts\TEST>(
set "PagingFiles!cnt!=F:\pagefile.sys"
set /a cnt=!cnt!+1
)

G:\scripts\TEST>set PagingFiles
PagingFiles1=F:\pagefile.sys

G:\scripts\TEST>pause
Для продолжения нажмите любую клавишу . . .

[/more]
включи эхо
Автор: ComradG
Дата сообщения: 11.07.2010 11:13
Melhior
wolf0425
Ну так мне привести пример батника с %errorlevel% относительно прошлых постов, раз никто не догадался как это реализуется?
Автор: wolf0425
Дата сообщения: 11.07.2010 11:14

Цитата:
может баг, а может сделано специально
специально написано безграмотно, чтоб не работало у неамериканцев???


Цитата:
и там совет попробовать использовать Unicode (UTF-8) как это можно сделать?
а что ты это здесь то спрашиваешь?
спрашивай пример батника у того умника, который это тебе посоветовал, заодно и нам расскажешь.


ComradG
Цитата:
Ну так мне привести пример батника с %errorlevel% относительно прошлых постов раз никто не догадался как это реализуется?
это с чего у тебя видения что "никто не догадался как" реализовать?
пока только увидели что ты привел заведомо нерабочий пример, не боле того.

приведешь рабочий - может он кому-то нужен, хотя точно не мне, я никаких примеров не просил, и как правильно пользоваться %errorlevel% - вполне знаю.
а также знаю что в описанном выше случае устанавливаемый программой %errorlevel% помочь ничем не мог - он всегда 0, так что привести ты можешь только "пример батника с %errorlevel%" для случая сферической лошади в вакууме.
Хотя если он не будет таким же безграмотным как в прошлый раз - то может хоть ты сам запомнишь как правильно писать, и больше конструкцию | echo %errorlevel% мы от тебя не увидим.
Автор: ComradG
Дата сообщения: 11.07.2010 11:37
wolf0425
Жалуйся в ООН. Хочешь показать насколько ты крут - иди в соседнюю ветку получать свои десять баксов.

Код: @echo off
2>nul cd ::
if %errorlevel%==0 goto:done
:fail
echo Execution failed
echo return value = %errorlevel%
goto:eof
one
echo Execution succeded
echo return value = %errorlevel%
goto:eof
exit /b
Автор: wolf0425
Дата сообщения: 11.07.2010 11:42
ComradG, вот умеешь же когда хочешь. наверно даже проверил перед отправкой.
Пример хоть и бесполезный для спрашивавшего, но хоть сам по себе работающий.
возьми с полки пирожок

А теперь еще расскажи общественности - почему я так матерюсь на ранее написанное тобой же

Код: что-то вроде
tasklist /fi "windowtitle eq notepad" | echo %errorlevel%
Автор: lorents
Дата сообщения: 11.07.2010 12:04
wolf0425

Цитата:
а что ты это здесь то спрашиваешь?

я прочитал это на одном форуме, но работает этот способ или нет, там нет подтверждения.
Автор: mugil_cephalus
Дата сообщения: 11.07.2010 12:09
wolf0425
а разве не windowtitle eq untitled - notepad ?

зато нашел как получить errlvl=1

Код: chcp 1251>nul
tasklistEN /fi "windowtitle eq "Безымянный - Блокнот""
echo._%errorlevel%_
pause
Автор: wolf0425
Дата сообщения: 11.07.2010 13:03

Цитата:
а разве не windowtitle eq untitled - notepad ?
да пофиг, %errorlevel% то все равно 0. Хотя в твоем варианте ещё и может написать в консоль что типа есть такое окно.

Но у ComradG была ошибка в том, что %errorlevel% на той же строке что и комманда, и печатается не результат выполнения tasklist а %errorlevel% от предыдущей строки батника, см. что печатает мой пример.

Добавлено:

Цитата:
а ты попробуй
а слабо самому пробовать перед тем как такое как советовать?
не работает оно так.
Автор: mugil_cephalus
Дата сообщения: 11.07.2010 13:10
wolf0425

Цитата:
может написать в консоль что типа есть такое окно.

да, такая дифференцация

Цитата:
Но там ошибка в том, что %errorlevel% на той же строке что и комманда, и напечатается не результат выполнения tasklist а %errorlevel% от предыдущей строки батника, см. мой пример.

та ошибка сразу видна

Добавлено:

Цитата:
а слабо самому пробовать перед тем как такое как советовать?
не работает оно так.

у меня нет того convert.exe , только win built-in ( другой )
Автор: wolf0425
Дата сообщения: 11.07.2010 13:26

Цитата:

Цитата: а слабо самому пробовать перед тем как такое как советовать?
не работает оно так.

у меня нет того convert.exe
Автор: mugil_cephalus
Дата сообщения: 11.07.2010 13:58
wolf0425
ничего не пойму, порнография какая-то, всю консоль измучил, даже диагностировать не могу - в чем дело
и сохранял батник в utf-8 через блокнот
объсни хоть что там происходит, дальше chcp 65001 не идет...
может cmd /u попробовать - ?
Автор: wolf0425
Дата сообщения: 11.07.2010 14:15

Цитата:
объсни хоть что там происходит, дальше chcp 65001 не идет..
именно то и происходит, что дальше не идет, т.е. нужен рабочий пример использования UTF-8 в батнике.


Цитата:
может cmd /u попробовать - ?
чего спрашивать то - попробуй...
у меня впечатление что этот ключик просто навсегда переключает вывод в 1200 = UTF-16 (Little endian), а кодировка кода ему по барабану.

Автор: res2001
Дата сообщения: 11.07.2010 15:38
mugil_cephalus
я тоже как-то парился с батниками в UTF8 - нифига не работает дальше chcp 65001.
В инете находил лишь аналогичные жалобы на то что не работает, но никаких дельных советов как заставить бат работать в UTF8 нет.
Автор: ComradG
Дата сообщения: 11.07.2010 15:47
res2001
Можно, конечно, как вариант попробовать прочие разновидности UTF-8. Если чуток подождете я подробно отпишусь что я имел в виду.
Автор: nemoW
Дата сообщения: 11.07.2010 15:55
res2001
Вот выдача ipconfig:
[more]Windows IP Configuration

Ethernet adapter Realtek PCI-E Gigabit LAN:

Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 10.0.31.32
Subnet Mask . . . . . . . . . . . : 255.0.0.0
Default Gateway . . . . . . . . . : 10.0.31.96

PPP adapter ADSL:

Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 111.111.111.111
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . : 111.111.111.111[/more]
Автор: res2001
Дата сообщения: 11.07.2010 16:22
nemoW

Код: @echo off
setlocal enabledelayedexpansion
set "adaptername=ADSL"
set "num="
for /f "tokens=1 delims=:" %%a in ('ipconfig ^| findstr /n "%adaptername%"') do set "num=%%a" & goto :step2
:step2
if defined num (
    set /a "num+=2"
    for /f "tokens=1,2 delims=:" %%a in ('ipconfig ^| more +!num!') do set ip=%%b & set "ip=!ip:~1!" & goto :step3
)
:step3
if defined set ip

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

Предыдущая тема: XP не видит второй раздел на съемном USB-HDD


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