Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Изменить настройки в *.ini файле через *.bat (http://forum.oszone.net/showthread.php?t=174457)

CyberMaster 29-04-2010 21:54 1403662

Изменить настройки в *.ini файле через *.bat
 
Помогите пожалуйста сделать батник, изменяющий настройки в *.ini файле.
Есть файл file.ini в нем есть такие стороки:

Server_address=XXX.XXX.XXX.XXX
Server_port=XXXX

Как с помощью *.bat файла изменить значения адреса сервера и порта?
P.s текущее значения в ини файле не постоянные. То есть они могут меняться.

megaloman 29-04-2010 22:51 1403709

А насколько принципиально решение с помощью bat-файла, а, допустим, не с помощью VBS или JS скрипта?

BSDельник 30-04-2010 01:45 1403792

Там только эти строки?

amel27 30-04-2010 03:16 1403810

CyberMaster, проще всего перенести эту секцию в конец файла, и добалять изменяемые строки непосредственно перед применением INI-файла:

Код:

>>file.ini ECHO Server_address=XXX.XXX.XXX.XXX
>>file.ini ECHO Server_port=XXXX


CyberMaster 30-04-2010 08:56 1403868

Цитата:

Цитата megaloman
А насколько принципиально решение с помощью bat-файла, а, допустим, не с помощью VBS или JS скрипта? »

Нет, нужен именно батник.
Цитата:

Цитата BSDельник
Там только эти строки? »

Нет, там есть еще и другие параметры...

amel27, спасибо, но данное решение мне не подойдет. Так как в том ини файле настройки поделены на секции такого вида:
Код:

[Main]
Server_address=XXX.XXX.XXX.XXX
Server_port=XXXX

[Proxy]
Enabled=0
Address=
И так далее...

Если я значения адрес сервера и порт опускаю в самый низ, то они не работают.

amel27 30-04-2010 09:10 1403872

Цитата:

Цитата CyberMaster
Если я значения адрес сервера и порт опускаю в самый низ, то они не работают. »

вместе со всей секцией "[Main]"?.. обычно порядок секций в INI не важен

megaloman 30-04-2010 09:48 1403889

Запускаем батник, а в батнике VBS. Как вариант, пробовал в батнике построчно переписывать ини-файл в другой (идея была вырезать начала строк, анализировать их на равенство строк Server_address= и Server_port= и, при равенстве, цеплять туда новое значение после знака = ), но не очень надёжно получается, особенно если в ини-файле есть строки вида %ТраЛяЛя%. :closed-to

CyberMaster 30-04-2010 10:00 1403898

amel27, в любом случае не подойдет :) Так как при каждом запуске батника, будут добавляться в конец файла новые строки.

Цитата:

Цитата megaloman
Запускаем батник, а в батнике VBS. Как вариант, пробовал в батнике построчно переписывать ини-файл в другой (идея была вырезать начала строк, анализировать их на равенство строк Server_address= и Server_port= и, при равенстве, цеплять туда новое значение после знака = ), но не очень надёжно получается, особенно если в ини-файле есть строки вида %ТраЛяЛя%. »

Можно подробнее? Не силен я в этих скриптах :)

amel27 30-04-2010 12:36 1403999

Цитата:

Цитата CyberMaster
при каждом запуске батника, будут добавляться в конец файла новые строки »

это не причина, сделать "болванку", а батником ее копировать и добавлять в копию нужные строки

megaloman 30-04-2010 13:30 1404038

Вложений: 1
Код:

' -----------------------------------------------------------------------------------
' Скрипт считывает указанный полным путём текстовый файл (переменная InName)
' В файле ищется первое вхождение каждой из двух подстрок (переменная Str1 и Str2)
'        (эти подстроки должны быть в начале строки без лидирующих пробелов!)
' Найденная строки заменяются на строки соответственно вида Str1+EqStr1        и Str2+EqStr2
' Строки EqStr1        и EqStr2 передаются в аргументах скрипта
' Полученный результат запис на место старого файла
' -----------------------------------------------------------------------------------
' Пример использования из командной строки
' H:\Delete\ModiIn.vbs "123.456.789.012" "3456"
' -----------------------------------------------------------------------------------

    InName = "H:\Delete\kuku.txt"
   
    Str1 = "Server_address="
    Str2 = "Server_port="

    Set InArg=WScript.Arguments

    EqStr1 = InArg(0)
    EqStr2 = InArg(1)

'    EqStr1 = "111.222.333.444"
'    EqStr2 = "5555"
   
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set InFile = FSO.OpenTextFile(InName, 1, False)
   
    AllStr = InFile.ReadAll
    InFile.Close
   
    AllStr = Replace(AllStr, Chr(10), "")
    Mass = Split(AllStr, Chr(13))
    i1 = LBound(Mass)
    i2 = UBound(Mass)
   
    Call ModiIniSub(Mass, i1, i2, Str1, EqStr1)
    Call ModiIniSub(Mass, i1, i2, Str2, EqStr2)
   
    Set InFile = FSO.OpenTextFile(InName, 2, False)
    For i = i1 To i2
        If i <> i2 Then
            InFile.WriteLine Mass(i)
        Else
            InFile.Write Mass(i)
        End If
    Next
    InFile.Close
   
   
Sub ModiIniSub(Mass, i1, i2, Stroka, EqStroka)
    LStroka = Len(Stroka)
    For i = i1 To i2
        If Mid(Mass(i), 1, LStroka) = Stroka Then
            Mass(i) = Stroka + EqStroka
            Exit For
        End If
    Next
End Sub

Исходник в файле

El Sanchez 30-04-2010 16:52 1404177

CyberMaster,

Вариант CMD/BAT:
Код:

@Echo Off
Setlocal ENABLEDELAYEDEXPANSION

Set "PathIniFile=C:\temp\test"
Set "IniFile=test.ini"
Set Count=1

Set /P "IP=Enter IP-address: "
Set /P "Port=Enter number of port: "

For /F "Tokens=1,2* Delims=:=" %%A In ('Findstr /IN . "%PathIniFile%\%IniFile%"') Do (
        Call :Func "%%A"
       
        If Not "%%C"=="" (
                If /I "%%B"=="Server_address" (
                        Echo %%B=%IP%>>"%PathIniFile%\tmp"
                ) Else (
                        If /I "%%B"=="Server_port" (
                                Echo %%B=%Port%>>"%PathIniFile%\tmp"
                        ) Else (
                                Echo %%B=%%C>>"%PathIniFile%\tmp"
                        )
                )
        ) Else (
                Echo %%B>>"%PathIniFile%\tmp"
        )
)
Move /Y "%PathIniFile%\tmp" %IniFile% 2>nul
GoTo :EOF

:Func
        Set /A Diff=%~1-!Count!
        If %Diff% GTR 0 For /L %%A In (1,1,%Diff%) Do (Set /A Count+=1 & Echo.>>"%PathIniFile%"\tmp)
        Set /A Count+=1


megaloman 30-04-2010 20:27 1404279

Еще вариант батника (недостаток - съедает все пустые строки, как побороть пока не знаю)
Мне показалась привлекательной идея цикла в цикле: сначала из файла берём строку, потом выделяем из неё кусок с помощью оператора For
Код:

Echo Off
rem --------------------------------------------------
rem Преобразуем файл, определённый в переменной InFile
rem Пример использования в командной строке
rem
rem Z_My.bat 123.456.789.012 3456
rem
rem --------------------------------------------------

If '%1%2==' GoTo :End

Set InFile="H:\Delete\kuku.txt"
Set Str1=Server_address
Set Str2=Server_port

rem --------------------------------------------------
Call :Replace %1 %2 %InFile%
GoTo :End

:Replace

Set InFileBak="%~3.bak"
Move %InFile% %InFileBak%

FOR /F "usebackq  delims=" %%i IN (%InFileBak%) DO (
  FOR /F "usebackq  delims==" %%j IN ('%%i') DO (
  If Not %%j==%Str1% (
      If Not %%j==%Str2% (
        Echo %%i>>%3
      ) Else (
        Echo %%j=%2>>%3
      )
  ) Else (
      Echo %%j=%1>>%3
  )
  )
)

:End


amel27 01-05-2010 15:36 1404643

Цитата:

Цитата El Sanchez
Вариант CMD/BAT »

коль пошла такая пьянка, до кучи еще вариант: :)

Код:

@Echo Off

CALL :REPLINE "file.ini" "Server_address=" "Server_address=192.1.1.1"
CALL :REPLINE "file.ini" "Server_port=" "Server_port=8080"

:REPLINE
 If Not Exist "%~1" Exit /B 1
 If Exist "%~dpn1.tmp" DEL /F/Q "%~dpn1.tmp"

 Set $N=0& For /F "Delims=:" %%i In ('FindStr /BINRC:" *%~2" "%~1"') Do Set $N=%%i
 If %$N% NEQ 0 For /F "Tokens=1* Delims=:" %%i In ('FindStr /ENRC:"$" "%~1"') Do If "%%i"=="%$N%" (
 Echo %~3>>"%~dpn1.tmp" ) ELSE Echo.%%j>>"%~dpn1.tmp"

 If Exist "%~dpn1.tmp" If Exist "%~1" DEL /F/Q "%~1"
 If Exist "%~dpn1.tmp" REN "%~dpn1.tmp" "%~nx1"
Exit /B 0


El Sanchez 01-05-2010 19:50 1404793


amel27, здОрово! Отличное решение с использованием регулярных выражений. Взял на заметку. :good:

volk1234 13-08-2011 02:03 1730888

amel27
Интересно, что если задать
"Server_address=1"
то в ини файле будет вот так
Server_address=

А если уже 2 символа написать в сначении, то работает...

SendMessage 13-08-2011 04:43 1730908

Цитата:

Цитата volk1234
Интересно, что если задать
"Server_address=1"
то в ини файле будет вот так
Server_address=
А если уже 2 символа написать в сначении, то работает... »

А если значение 0 или от 2 до 9, то параметр Server_address вообще исчезает. Ну и с Server_port, конечно, то же самое. :)
Глюки обработки в cmd. Решается взятием в дополнительные скобки:
Код:

If "%%i"=="%$N%" ((Echo %~3)>>"%~dpn1.tmp")

sLiDeR-X 13-08-2011 08:42 1730927

CyberMaster, можно через chgstr сделать довольно легко

volk1234 14-08-2011 16:32 1731621

SendMessage
Дополнительные скобки не помогли...

SendMessage 14-08-2011 17:17 1731656

Цитата:

Цитата volk1234
Дополнительные скобки не помогли... »

Странно. у меня работает. Как и простой пробел перед направлением в файл.
Код:

If "%%i"=="%$N%" (Echo %~3 >>"%~dpn1.tmp")
А батник идентичен батнику amel27?

Foreigner 14-08-2011 20:14 1731772

Цитата:

Цитата SendMessage
А если значение 0 или от 2 до 9 »

Просто %3 определяется как дескриптор перенаправления выходного потока. Пример:
Код:

@echo off

for /l %%i in (0,1,9) do call:echo %%i
goto:eof

:echo
echo %1>>test-1.txt
echo.%1>>test-2.txt

Именно по этому в файле test-1.txt только одна запись об ошибке. Запись когда передавался параметр со значением 2, т.е. STDERR.

volk1234 14-08-2011 22:52 1731851

текст батника
Код:

@Echo Off

CALL :REPLINE "drwu.ini" "Autostart=" "Autostart=1"
CALL :REPLINE "drwu.ini" "Destination=" "Destination=.\DrWebUP"

:REPLINE
 If Not Exist "%~1" Exit /B 1
 If Exist "%~dpn1.tmp" DEL /F/Q "%~dpn1.tmp"

 Set $N=0& For /F "Delims=:" %%i In ('FindStr /BINRC:" *%~2" "%~1"') Do Set $N=%%i
 If %$N% NEQ 0 For /F "Tokens=1* Delims=:" %%i In ('FindStr /ENRC:"$" "%~1"') Do If "%%i"=="%$N%" (
 Echo %~3 >>"%~dpn1.tmp" ) ELSE Echo.%%j>>"%~dpn1.tmp"

 If Exist "%~dpn1.tmp" If Exist "%~1" DEL /F/Q "%~1"
 If Exist "%~dpn1.tmp" REN "%~dpn1.tmp" "%~nx1"
Exit /B 0

текст инишника
Код:

[DrWU]
Language=Russian
Boot=0
AutoUpdate=1
Autostart =0
ExitAfterUpdate=
UseMethod=1
UpdateMethod=0
FTPPassive=0
UpdateTXT=1
UpdateInterval=120
EnableAdditionalPath=0
Source=
UseProxy=0
Proxy=
Destination=.\DrWebUP

ЗЫ. Запостил сообщение и заметил ошибку, параметр autostart отделен пробелом от значения- это уже я эксперементировал и пробовал с пробелом и без...
Убрал в ини файле и ваш совет помог- если сделать пробел между %3 и >> то работает :)

Anton04 15-08-2011 17:51 1732442

amel27,

А можно немного усложнить задачу?

Что если часть значения которое нужно заменить необходимо вычислить? Например переменную %PROGRAMFILES% в пути C:\Program Files\Opera\profile\scripts ?

Например должно получится так

CALL :REPLINE "operaprefs.ini" "User JavaScript File=" "User JavaScript File=C:\Program Files\Opera\profile\scripts"

Но для этого нужно вычислить с начало переменную и подставить его в значение...

SendMessage 16-08-2011 00:40 1732711

Anton04, ну и напиши
Код:

CALL :REPLINE "operaprefs.ini" "User JavaScript File=" "User JavaScript File=%PROGRAMFILES%\Opera\profile\scripts"
%PROGRAMFILES% является переменной среды и уже прописана.

Anton04 16-08-2011 10:07 1732861

Цитата:

Цитата SendMessage
%PROGRAMFILES% является переменной среды и уже прописана. »

хм.... действительно, а я то думал что нужно ещё вычислить её... Спасибо за разъяснение. :beer2:

Так теперь хочется немного универсальности, что бы можно было запускать прямо из командной строки типа:

edit_ini_file.cmd "%PROGRAMFILES%\Opera\profile\scripts\operaprefs.ini" "User JavaScript File=" "User JavaScript File=%PROGRAMFILES%\Opera\profile\scripts"

т.е. прописывать путь к файлу в котором менять и что менять не редактируя сам скрипт.

Кто поможет в реализации? :help:

SendMessage 16-08-2011 12:40 1732999

Цитата:

Цитата Anton04
Так теперь хочется немного универсальности, что бы можно было запускать прямо из командной строки типа:
edit_ini_file.cmd "%PROGRAMFILES%\Opera\profile\scripts\operaprefs.ini" "User JavaScript File=" "User JavaScript File=%PROGRAMFILES%\Opera\profile\scripts"
т.е. прописывать путь к файлу в котором менять и что менять не редактируя сам скрипт. »

Заменить строку
Код:

CALL :REPLINE "operaprefs.ini" "User JavaScript File=" "User JavaScript File=%PROGRAMFILES%\Opera\profile\scripts"
на
Код:

CALL :REPLINE %1 %2 %3

Anton04 16-08-2011 14:17 1733087

SendMessage,

Странно, но не работает... пишет if not exist... :not-me:

SendMessage 16-08-2011 15:40 1733134

Anton04, не могу воспроизвести Вашу ошибку. Создал в папке Internet Explorer ини-файл и прописал в комстроке:
Код:

z:\iniwrite.bat "%PROGRAMFILES%\Internet Explorer\file.ini" "User JavaScript File=" "User JavaScript File=%PROGRAMFILES%\Opera\profile\scripts"
Все отрабатывает нормально.

Anton04 16-08-2011 16:01 1733152

SendMessage,

Видать где-то ошибся в написании %PROGRAMFILES%, переписал заново и всё пошло. Ещё раз спасибо.

ppt_ 15-05-2012 09:29 1916150

Цитата:

Цитата amel27
коль пошла такая пьянка, до кучи еще вариант:
Код:
@Echo Off
CALL :REPLINE "file.ini" "Server_address=" "Server_address=192.1.1.1"
CALL :REPLINE "file.ini" "Server_port=" "Server_port=8080"
:REPLINE
If Not Exist "%~1" Exit /B 1
If Exist "%~dpn1.tmp" DEL /F/Q "%~dpn1.tmp"
Set $N=0& For /F "Delims=:" %%i In ('FindStr /BINRC:" *%~2" "%~1"') Do Set $N=%%i
If %$N% NEQ 0 For /F "Tokens=1* Delims=:" %%i In ('FindStr /ENRC:"$" "%~1"') Do If "%%i"=="%$N%" (
Echo %~3>>"%~dpn1.tmp" ) ELSE Echo.%%j>>"%~dpn1.tmp"
If Exist "%~dpn1.tmp" If Exist "%~1" DEL /F/Q "%~1"
If Exist "%~dpn1.tmp" REN "%~dpn1.tmp" "%~nx1"
Exit /B 0
------- »

Отличный батник, все работает, хочу прикрутить его под свою задачку.
Задача заменить в инишнике ряд параметров, например найти в тексте слово ACTION и заменить на слово Действие. Текущий батник заменяет параметр но удаляет в строчке все что находиться после подмененного значения. Подскажите что нужно изменить в батнике?

sov44 15-05-2012 12:29 1916247

Подскажите, как в BCDW.ini
читать дальше »
часть ini:
Код:

[MenuItems]
:; *** Описания вариантов загрузки
C:\ ; Загрузка с жесткого диска ; ^ Продолжение загрузки с жесткого диска
\i386\setuplda.bin ; Автоматическая установка Windows XP 2012 ; Автоматическая установка Windows XP SP3 2012 Pro ^ с обновлениями по 15 марта 2012 года, драйверами и программами
\i386\setupldr.bin ; Ручная установка Windows XP 2012 ( с консолью восстановления ) ; Ручная установка Windows XP SP3 2012 Pro с обновлениями по 15 марта 2012 года ^ Во время установки введите свой лицензионный ключ
....


заменить значение 15 марта 2012 года переменной ( к примеру %date%) Скрипт amel27 в посте 13 не смог приспособить.

sov44 16-05-2012 09:11 1916795

Прошу пояснить скрипт amel27 в посте 13 для понимания и применения к своей задаче :)

sanchoas 23-07-2013 15:13 2189221

Помогите решить проблему

Описание: Смысл такой что бы файл который находится в паке "D:\TEST\11111111111\84\update\script.sql"
нужно скопировать и положить в каждую папку !

и если получится сделать так что бы в файле "script.sql"
UPDATE DEFAULT_SETTINGS SET VALUE = '69001' WHERE NAME = 'TERMINAL_NAME';

Менять значение нашедшое к папке.

К примеру: в папке 84 лежит файл "script.sql"в нем хадодится текст: "UPDATE DEFAULT_SETTINGS SET VALUE = '69001' WHERE NAME = 'TERMINAL_NAME';" и цифра которая виделана жирным менялась в соотношении названии папки..

папка "84" изменялось в фале "script.sql" значение 69001
папка "100" "script.sql" значение 69002
папка "101" "script.sql" значение 69002
и т.д.п до 254 папки

Нужно перекопировать в каждую папку, и внутри файла что изменяло значение (но хотя бы для начала, что бы оно скопировало сразу в все папки)

Iska 23-07-2013 15:38 2189234

sanchoas, ещё раз, и, пожалуйста — по-русски.

zavoruev 23-07-2013 15:40 2189236

sanchoas,
А по чему именно в этой теме "Изменить настройки в *.ini файле через *.bat" задали свой вопрос???!!!

sanchoas 23-07-2013 15:47 2189240

Стала такая задача: 1 файл script.txt раскидать по 250 папкам
но так что бы текст в файле менялся в периодичности с названием папки.

Текст в нутри файла script.txt UPDATE DEFAULT_SETTINGS SET VALUE = '69001' WHERE NAME = 'TERMINAL_NAME';

название папки "84" изменялось в фале "script.sql" значение 69001
название папка "100" "script.sql" значение 69002
название папка "101" "script.sql" значение 69002
и т.д.п до 250 папки

Можно сделать Батьник что бы он раскидал это файл по 250 папкам и изменил значение в этом файле ???

название папка "100" "script.sql" значение 69001
название папка "101" "script.sql" значение 69002
название папка "102" "script.sql" значение 69003
название папка "103" "script.sql" значение 69004
название папка "104" "script.sql" значение 69005
название папка "105" "script.sql" значение 69006

ну и так далее...

Iska 23-07-2013 16:23 2189256

sanchoas, делайте. Я — пас.

sanchoas 23-07-2013 16:29 2189261

Есть файл с названием script.txt лежит в папке с названием 100. Таких папок у меня 254 и в каждой из них лежит файл "script.txt"


Текст внутри файла script.txt :
UPDATE DEFAULT_SETTINGS SET VALUE = '69001' WHERE NAME = 'TERMINAL_NAME';

мне надо что бы Батьником изменить в каждом файле значение "69001" в соотношении с папкой

папка 100 значение в тексте файла 69001
папка 101 значение в тексте файла 69001
папка 102 значение в тексте файла 69001

а мне нужно что бы было так:
папка 100 значение в тексте файла 69001
папка 101 значение в тексте файла 69002
папка 102 значение в тексте файла 69003

и так далее... Очень горящий вопрос... помогите пожалуйста

ECHO ON
for /l %%i in (100,1,254) do (copy "D:\TEST\11111111111\84\update\script.sql" "D:\TEST\11111111111\%%i\update\")

вот батьник путем каким я переместил во все папки один и тот же файл... может кому пригодится

( как 1 файл роскидать по папкам )

KDash 03-12-2014 21:03 2439285

Прошу прощения, что занимаюсь некрофилией, но мой вопрос уместен в этой теме.
Также нуждаюсь в батнике, который бы менял 2 значения в следующем варианте текстового файла:
Код:

4 29
5 50978
130
131 10107
132 201204
133 1
134 1

То есть 2 строки: 131 и 132, изменяемое значение вручную: 10107 и 201204

Если брать за основу код товарища El Sanchez-а:
Код:

@Echo Off
Setlocal ENABLEDELAYEDEXPANSION

Set "PathIniFile=C:\temp\test"
Set "IniFile=test.ini"
Set Count=1

Set /P "IP=Enter IP-address: "
Set /P "Port=Enter number of port: "

For /F "Tokens=1,2* Delims=:=" %%A In ('Findstr /IN . "%PathIniFile%\%IniFile%"') Do (
        Call :Func "%%A"
       
        If Not "%%C"=="" (
                If /I "%%B"=="Server_address" (
                        Echo %%B=%IP%>>"%PathIniFile%\tmp"
                ) Else (
                        If /I "%%B"=="Server_port" (
                                Echo %%B=%Port%>>"%PathIniFile%\tmp"
                        ) Else (
                                Echo %%B=%%C>>"%PathIniFile%\tmp"
                        )
                )
        ) Else (
                Echo %%B>>"%PathIniFile%\tmp"
        )
)
Move /Y "%PathIniFile%\tmp" %IniFile% 2>nul
GoTo :EOF

:Func
        Set /A Diff=%~1-!Count!
        If %Diff% GTR 0 For /L %%A In (1,1,%Diff%) Do (Set /A Count+=1 & Echo.>>"%PathIniFile%"\tmp)
        Set /A Count+=1

то он вполне подходит, только если бы после 131 стояло =, но у меня пробел. Подскажите, пожалуйста, что нужно поменять, чтобы код работал в моих условиях!

Georgio 03-12-2014 21:19 2439296

Цитата:

Цитата KDash
код товарища El Sanchez-а »

не изучал, но логично предположить, что то, что Вам надо, здесь:
Код:

For /F "Tokens=1,2* Delims=:=" %%A In ('Findstr /IN . "%PathIniFile%\%IniFile%"') Do (
.

Просто попробуйте заменить выделенный красным цветом знак равенства на пробел.

KDash 04-12-2014 07:28 2439392

Georgio,
В том то и дело, что пробовал всяко с этой командой - результат либо сокрушительный для файла, либо невыполнимый, либо заменяет все пробелы на равенство :)
Поэтому решил сдаться и написать здесь вопрос. :)

Georgio 04-12-2014 13:20 2439540

KDash, я не редактирую чужие коды, а пишу свои. Уточните постановку задачи и прикрепите архив с Вашим текстовым файлом к сообщению.

KDash 04-12-2014 21:25 2439766

Мммм... даже не знаю, что ещё добавить к тому что уже написал. Начну заново.
Есть текстовой файл - file.txt . Со следующим содержанием:
Код:

4 29
5 50978
130
131 10107
132 201204
133 1
134 1

Мне нужен такой батник, при запуске которого была бы возможность вручную изменять значение (в данном примере значение 10107), сначала, в строке 131, а затем, значение (в примере - 201204) в строке 132 этого текстового файла. Изменяемые строки всегда будут начинаться со 131 и 132, с пробелами.
Этот файл по-умолчанию, всегда, находится по пути "C:\DirSYS\file.txt".

Iska 04-12-2014 23:36 2439799

KDash, архив просят прикладывать вовсе не случайно.

Georgio 05-12-2014 05:30 2439848

Цитата:

Цитата Georgio
<...> прикрепите архив с Вашим текстовым файлом к сообщению. »

Цитата:

Цитата Iska
KDash, архив просят прикладывать вовсе не случайно. »



Ну что с Вами делать?.. Держите ("на Ваш страх и риск"):


Код:

@echo off

set "file=C:\DirSYS\file.txt"

for %%i in ("131" "132") do (
 echo Enter the new value for %%i.& echo.& set /p "%%~i="& echo.& echo.
 for /f "delims=" %%j in ('
  "type "%file%"&&>"%file%" type nul||>nul timeout 3&&>&2 (echo.& echo.& echo.)"
 ') do (
  for /f %%k in ("%%j") do (
  if "%%k" equ %%i (
    cmd /v:on /c echo %%~i !%%~i!
  ) else (
    echo %%j
  )
  )>>"%file%"
  )
 )

exit /b


.


Данный код можно использовать и для изменения любого количества других аналогичных значенй. Куда, как и что вписывать, думаю, догадаетесь.

KDash 29-04-2015 15:46 2502235

Вложений: 1
Возвращаюсь к предоставленному мне коду. Очень помогло это решение, спасибо. Но возникла очередная задача - сделать загрузочную дискету с этим кодом. Если просто вставлять код в Autoexec.bat или загрузится с загрузочной дискеты DOS и потом уже запустить батник с этим кодом, то команда не срабатывает, указывая на ошибку синтаксиса или плохую команду... Подскажите, что нужно дописать в autoexec.bat, config.sys, чтобы команда срабатывала при загрузке с загрузочной дискеты (флешки) MS-DOS?

Iska 29-04-2015 16:48 2502246

KDash, данный код не предназначен для DOS.

KDash 05-05-2015 09:48 2503927

Iska, ясно.
А можно ли сделать загрузочную дискету (флеш) не с DOS? Какая загрузочная среда сможет понять данный синтаксис?

assa-as 13-10-2017 12:30 2770282

В чем может быть проблема батник работает только если сам создал изменяемый файл " file.ini" ... с файлом который создало сторонее приложение не работает ...

Скрытый текст
@Echo Off

CALL :REPLINE "file.ini" "Server_address=" "Server_address=192.1.1.1"
CALL :REPLINE "file.ini" "Server_port=" "Server_port=8080"

:REPLINE
If Not Exist "%~1" Exit /B 1
If Exist "%~dpn1.tmp" DEL /F/Q "%~dpn1.tmp"

Set $N=0& For /F "Delims=:" %%i In ('FindStr /BINRC:" *%~2" "%~1"') Do Set $N=%%i
If %$N% NEQ 0 For /F "Tokens=1* Delims=:" %%i In ('FindStr /ENRC:"$" "%~1"') Do If "%%i"=="%$N%" (
Echo %~3 >>"%~dpn1.tmp" ) ELSE Echo.%%j>>"%~dpn1.tmp"

If Exist "%~dpn1.tmp" If Exist "%~1" DEL /F/Q "%~1"
If Exist "%~dpn1.tmp" REN "%~dpn1.tmp" "%~nx1"
Exit /B 0

Iska 13-10-2017 12:40 2770284

Цитата:

Цитата assa-as
В чем может быть проблема батник работает только если сам создал изменяемый файл " file.ini" ... с файлом который создало сторонее приложение не работает ... »

Например, в кодировке «file.ini». Упакуйте Ваш оригинальный, созданный этим самым сторонним приложением, «file.ini» в архив, каковой приложите к сообщению. Посмотрим.

assa-as 13-10-2017 16:14 2770318

Цитата:

Цитата Iska
Например, в кодировке «file.ini». Упакуйте Ваш оригинальный, созданный этим самым сторонним приложением, «file.ini» в архив, каковой приложите к сообщению. Посмотрим. »

ну понятно что файл взял при выключенной самозащите , остановленной службе и и остановленных процессах

https://www.upload.ee/files/7553883/sett.rar.html

Iska 13-10-2017 16:14 2770319

assa-as, не надо раз за разом долбиться ко мне в личку, пишите здесь.

Цитата:

Цитата assa-as
https://www.upload.ee/files/7553883/a2settings.rar.html »

Для меня недоступен указанный ресурс. Прикрепите архив к сообщению, либо выложите на RGhost или Яндекс.Диск.

assa-as 13-10-2017 16:46 2770328

преобразовал ANSI - прокатило :up ... но как теперь батником кодировку поменять ...

Цитата:

Цитата Iska
Для меня недоступен указанный ресурс »

все нашел .. спасибо

Iska 13-10-2017 18:54 2770361

Цитата:

Цитата assa-as
все нашел .. спасибо »

Не за что. Я и с RGhost'а сегодня не могу ничего забрать, недоступен конечный ресурс :).

assa-as 13-10-2017 23:09 2770404

del


Время: 23:57.

Время: 23:57.
© OSzone.net 2001-