Показать полную графическую версию : [решено] Чтение строки из файла в переменную
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) и будет у вас хост.
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, в остальном - код отличный! спасибо!
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-файл
Пока ломаю голову как сделать проверку...
необходимо проверить какой сейчас 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
Такой вопрос. С помощью
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.