Войти

Показать полную графическую версию : [решено] Чтение строки из файла в переменную


Страниц : 1 [2] 3

wander84
22-04-2009, 13:20
Petya V4sechkin , спасибо за столь скорый ответ.
Сейчас посмотрю что такое Dynamic DNS и с чем его кушать))

wander84
22-04-2009, 13:53
Petya V4sechkin , я нашел инфу: принцип Dynamic DNS довольно прост - на своем динамическом хосте устанавливается dyndns-клиент, который периодически "сливает" адрес своего хоста на свой публичный dyndns-сервис, на котором зарегистрирован ваш домен, а этот сервис каждый раз корректирует настройки DNS-зоны в соответствии с изменившимся адресом хоста. Иными словами, сервис осуществляет их периодическую синхронизацию таким образом, чтобы доменное имя всегда соответствовало "гуляющему" IP-адресу вашего хоста.

Только вот у меня нет хоста...
Если всё же возвращаться к нашим BAT-файлам:
Как вытащить нужную строку из txt файла и записать в другой txt файл?
Возможно ли сделать так, чтобы информация об IP-адресе(ipconfig информация,записанная в txt файле) сначала сравнивалась с предыдущей и только в случае её изменения отправлялась на почту?

Petya V4sechkin
22-04-2009, 14:03
Только вот у меня нет хоста
Читайте документацию (http://www.dyndns.com/services/dns/dyndns/howto.html) и будет у вас хост.

amel27
23-04-2009, 09:37
wander84, если на интерфейсе публичный адрес (что бывает редко) получить IP можно так:
@Echo Off

For /F "Tokens=1 Skip=1 Delims={,} " %%i In ('WMIC NICCONFIG Where IPEnabled^=True Get IPAddress^|FindStr "."') Do Call :ParseIP %%i
@Echo IP Address: %$IPAddress%

EXIT

:ParseIP
Set $IPAddress=%~1
GoTo :EOF
З.Ы. если TCP/IP интерфейс не один, нужно дополнительно указывать в условии его индекс

wander84
23-04-2009, 18:23
amel27, спасибо. Попробуем!

wander84
24-04-2009, 12:40
amel27, TCP/IP интерфейс не один... Только вот как указывать его?


Настройка протокола IP для Windows

Подключение по локальной сети 3 - Ethernet адаптер:

Состояние сети . . . . . . . . . : сеть отключена

xx - Ethernet адаптер:

DNS-суффикс этого подключения . . :

IP-адрес . . . . . . . . . . . . : x.x.x.x

Маска подсети . . . . . . . . . . : 255.255.255.0

Основной шлюз . . . . . . . . . . :

{0C251A4C-8E77-44B1-8B87-B0B2DC6244E4} - PPP адаптер:

DNS-суффикс этого подключения . . :

IP-адрес . . . . . . . . . . . . : 92.36.108.126

Маска подсети . . . . . . . . . . : 255.255.255.255

Основной шлюз . . . . . . . . . . : 92.36.108.126

92.36.108.126 вот он мне нужен!
amel27, в остальном - код отличный! спасибо!

amel27
25-04-2009, 07:03
wander84, выполнить в командной строке:
WMIC NICCONFIG Where IPEnabled=True Get Index,IPAddress
определить индекс адаптера и подправить условие в батнике (пример для "1"):
@Echo Off

For /F "Tokens=1 Skip=1 Delims={,} " %%i In ('WMIC NICCONFIG Where Index^=1 Get IPAddress^|FindStr "."') Do Call :ParseIP %%i
@Echo IP Address: %$IPAddress%

EXIT

:ParseIP
Set $IPAddress=%~1
GoTo :EOF

wander84
30-04-2009, 18:04
Понял. Получилось. Использую. amel27, Спасибо!

Теперь такая вот задачка стала передо мной:
Создается файл в определенное время. Его имя создается исходя из IP-адреса(полученого выше):
echo %$IPAddress%>>C:\%$IPAddress%
Вот он создался-например C:\92.15.67.21
Через промежуток времени(скажем 1 час), необходимо проверить какой сейчас IP и сравнить его с тем что создался ранее (C:\92.15.67.21). И если:
1) эти IP одинаковы(равны), то ничего не делать.
2) эти IP неодинаковы(неравны), то выполнить bat-файл

Пока ломаю голову как сделать проверку...

amel27
04-05-2009, 08:50
необходимо проверить какой сейчас IP и сравнить его с тем что создался ранее (C:\92.15.67.21). И если:
1) эти IP одинаковы(равны), то ничего не делать.
2) эти IP неодинаковы(неравны), то выполнить bat-файл »
вариант на базе предыдущего:
@Echo Off

Set $PATH=C:
Set $BATN=C:\Batnik.CMD

For /F "Tokens=1 Skip=1 Delims={,} " %%i In ('WMIC NICCONFIG Where Index^=1 Get IPAddress^|FindStr "."') Do Call :ParseIP %%i
For /F %%i In ('DIR /A:-D/B "%$PATH%\*"^|FindStr /XRC:"[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"') Do Set %%i=X

If Not Defined %$IPAddress% Call "%$BATN%"

EXIT

:ParseIP
Set $IPAddress=%~1
GoTo :EOF

biggiesa
06-05-2009, 16:53
Уважаемые эксперты помогите пожалуйста решить проблему. Есть папка с фаилами, которые надо переслать по е-маилу (отдельный файл посылается отдельным е-маилом) после чего переписать в подпапку, у которой название соответствует дате. Пересылать думал Blatom , пока не могу разобраться как Blatu дать в качестве аргумента имя фаила.

wander84
08-05-2009, 17:41
C:\Batnik.CMD »
выполняется в обоих случаях(если IP совпадает с записанным ранее и если IP не совпадает с записанным ранее), а нужно чтобы выполнялся только если IP не совпадает с записанным ранее.

Devils0411
16-05-2009, 22:46
Проблема такого рода. Есть папка "C:\Recovery" с более чем 20000 .txt файлов. В одном из этих файлов есть строка "Progressive" Нужно создать батник, который при нахождении этой строки, или указывал название файла, содержащего эту строку, или копировал его (Скажем на диск D)

Petya V4sechkin
17-05-2009, 08:25
который при нахождении этой строки, или указывал название файла
Findstr /L /I /M /C:"Progressive" C:\Recovery\*.txt
или копировал его (Скажем на диск D)
@Echo Off
For /F "Delims=" %%I In ('Findstr /L /I /M /C:"Progressive" C:\Recovery\*.txt') Do (
Echo %%~nxI
Copy "%%~I" D:\ >nul
)

Devils0411
17-05-2009, 11:21
@Echo Off
For /F "Delims=" %%I In ('Findstr /L /I /M /C:"Progressive" C:\Recovery\*.txt') Do (
Echo %%~nxI
Copy "%%~I" D:\ >nul »
Создает почти 1000 процессов cmd.exe

Petya V4sechkin
17-05-2009, 14:35
Создает почти 1000 процессов cmd.exe
Странно, не должно такого быть.
Можно и по другому цикл сформировать, но это в 10 раз медленнее:
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion

For /F "Delims=" %%I In ('Dir /A-D /B C:\Recovery\*.txt') Do (
Findstr /L /I /M /C:"Progressive" "C:\Recovery\%%I" >nul
If !ErrorLevel!==0 (
Echo %%I
Copy "C:\Recovery\%%I" D:\ >nul
)
)

ntro142343245
10-06-2009, 20:00
Добрый день помгите вот с такой задачкой!
Собственно, возможно ли при помощи батинка заменять строки в файлах. aka Ctrl+H в любом блокноте.

Сразу же пример.

есть на C:\ файл dir.txt следущего содержания:
c:\Docume~1\Admin\Cookies\кукис[1].txt
c:\Docume~1\Admin\Cookies\кукис[2].txt
c:\Docume~1\Admin\Cookies\кукис[3].txt
c:\Docume~1\Admin\Cookies\кукис[4].txt
c:\Docume~1\Admin\Cookies\кукис[5].txt
нужно просто перед каждой строчкой поставить send:
send c:\Docume~1\Admin\Cookies\кукис[1].txt
send c:\Docume~1\Admin\Cookies\кукис[2].txt
send c:\Docume~1\Admin\Cookies\кукис[3].txt
send c:\Docume~1\Admin\Cookies\кукис[4].txt
send c:\Docume~1\Admin\Cookies\кукис[5].txt

если это невыполнимо при помощи бат, то может каким нить другим способом?
ну может при помощи js или vbs?

Petya V4sechkin
10-06-2009, 20:31
ntro142343245, результат в C:\dir2.txt
@Echo Off
Del /F /Q C:\dir2.txt 2>nul
For /F "Delims=" %%I In (C:\dir.txt) Do Echo send %%I>>C:\dir2.txt

Maza Faka
11-06-2009, 07:25
при помощи батинка заменять строки в файлах »
Быстрее, эффективней и без проблем со спец. символами, если использовать SED.EXE (http://unxutils.sourceforge.net/) :)

Sed "s/.*/send &/g" <dir.txt > result.txt

yumi
28-07-2009, 16:06
Такой вопрос. С помощью
REG EXPORT HKLM\SYSTEM\ControlSet001\Control\Network\ NetworkList.reg /nt4
findstr "^.Name.=" NetworkList.reg > 1.txt
получаю текстовый файл с именами существующих имен сетевых интерфейсов.
"Name"="Подключение по локальной сети"
"Name"="1394-соединение"
"Name"="Подключение по локальной сети 2"
"Name"="Подключение по локальной сети 3"
"Name"="Беспроводное сетевое соединение"
Как прочитать и перенаправить каждое имя в свою переменную, причем желательно в виде
Подключение по локальной сети
1394-соединение
Подключение по локальной сети 2
Подключение по локальной сети 3
Беспроводное сетевое соединение
т.е. без всяких лишних символов. Также следует учесть, что сетевых интерфейсов не обязательно будет пять как в данном примере.
Будет использоваться для отключения/включения сети в
netsh routing ip set interface name="переменная с именем сети" state=disable
Хотя, наверное, в данном случае переменная должна быть одна для организации цикла отключения всех сетевых интерфейсов.
Подскажите пожалуйста.

Petya V4sechkin
28-07-2009, 16:26
REG EXPORT HKLM\SYSTEM\ControlSet001\Control\Network\ NetworkList.reg /nt4
findstr "^.Name.=" NetworkList.reg > 1.txt
Оно вообще-то выводит не только существующие, но и все прошлые (фантомные) подключения.

Хотя, наверное, в данном случае переменная должна быть одна для организации цикла отключения всех сетевых интерфейсов.
Если позволите предложить альтернативу, можно с помощью CNic.exe (http://tools.oszone.net/V4sechkin/MS/CNic.zip)
@Echo Off
SetLocal EnableExtensions

For /F "Skip=4 Tokens=1 Delims= " %%I In ('CNic.exe -l') Do (
CNic.exe n:%%I -d
)




© OSzone.net 2001-2012