返回列表 发帖

[文本处理] BAT批处理怎样读取ini内容设置变量?

[ThisIp]
tcpip001=192.168.1.10;192.168.1.1
tcpip002=192.168.2.20;192.168.2.1
tcpip003=192.168.3.30;192.168.3.1
tcpip004=192.168.4.40;192.168.4.1COPY
如上图,我要实现从这个ini文件获取第二行 末位数值。。
也就是tcpip001=192.168.1.10;192.168.1.1 的末位数值
并判断
如果末位 是1   就更改成 2
如果末位 是2   就更改成 1

该行主要是有 =  ;  分隔符 所以不怎么会弄。。原来解答的人希望可以讲解下代码。

把文件内容发出来,不要截图。

TOP

回复 2# DAIC


    已经把文字补上去了,希望你可以帮帮忙!!

TOP

for /f "tokens=1,2,3,4,5,6,7,8* delims=." %%a in (ip.txt) do (
    if  "%%h" equ "1" (
        echo %%a.%%b.%%c.%%d;%%e.%%f.%%g.2%%i>>newFile.txt
    ) else (
        if  "%%h" equ "2" (
             echo %%a.%%b.%%c.%%d;%%e.%%f.%%g.1%%i>>newFile.txt
        ) else (
              %%a.%%b.%%c.%%d;%%e.%%f.%%g.1%%i>>newFile.txt
        )
    )
)
rem ren ip.txt
你按照这个思路改改,现在没空调试

TOP

@echo off
setlocal enabledelayedexpansion
set n=0
(for /f "delims=" %%i in (1.ini) do (
    set "str=%%i"
    set /a n+=1
    if !n! == 2 (
        if !str:~-1! == 1 (
            echo,!str:~0,-1!2
        ) else (
            echo,!str:~0,-1!1
        )
    ) else (
        echo,%%i
    )
))>2.iniCOPY

TOP

@echo off
(for /f "delims=" %%a in ('findstr /n .* a.ini') do (
    set "str=%%a"
    setlocal enabledelayedexpansion
    if "!str:~,2!!str:~-1!" == "2:1" (
        echo,!str:~2,-1!2
    ) else (
        if "!str:~,2!!str:~-1!" == "2:2" (
            echo,!str:~2,-1!1
        ) else echo,!str:*:=!
    )
    endlocal
))>b.ini
pauseCOPY

TOP

回复 5# DAIC


    果然这里高手多,能解释一下那段替换代码吗?  如果是1 换成50   如果是50换成1 不知道怎么修改。

还有一个问题这样要必须生成一个新的INI文件,如果生成同名的 内容就空白了。

我举个例子。有一个程序运行必须调用D:\123\456.INI的参数。我运行批处理读取INI的内容 。如果tcpip=192.168.1.10;192.168.1.1 内容末位是 1  就将它改成50。
这样我运行该程序的时候就连接到192.168.1.50服务器。。  
运行批处理ini 末位 是50 就换成1 ,

TOP

回复 6# apang


    还有一个问题这样要必须生成一个新的INI文件,如果生成同名的 内容就空白了。

我举个例子。有一个程序运行必须调用D:\123\456.INI的参数。我运行批处理读取INI的内容 。如果tcpip=192.168.1.10;192.168.1.1 内容末位是 1  就将它改成50。
这样我运行该程序的时候就连接到192.168.1.50服务器。。  
运行批处理ini 末位 是50 就换成1 ,

TOP

本帖最后由 apang 于 2014-5-31 22:29 编辑

回复 8# zhong365


    更改第2行变量的值。ini文件中不能包含有\或/字符
@echo off
set "a=1" & set "b=50" & set "file=a.ini"
(for /f "delims=" %%a in ('findstr /n .* "%file%"') do (
    for /f "delims=" %%b in ("\%%a") do (
        set "str=%%~nb"
        setlocal enabledelayedexpansion
        if "!str:~,2!%%~xb" == "2:.%a%" (
            echo,!str:~2!.%b%
        ) else (
            if "!str:~,2!%%~xb" == "2:.%b%" (
                echo,!str:~2!.%a%
            ) else echo,!str:*:=!%%~xb
        )
        endlocal
    )
))>$
move $ "%file%"
pauseCOPY
或者这样试试:
@set @n=0; /* & echo off
set "a=1" & set "b=50" & set "file=a.ini"
cscript -nologo -e:jscript "%~0"<"%file%">$ "%a%" "%b%"
move $ "%file%"
pause & exit/b & rem */
var a = WScript.Arguments(0); b = WScript.Arguments(1);
var txt = WScript.StdIn.ReadAll();
var re = new RegExp("^(.*\\r?\\n.*\\.)("+a+"|"+b+")(\\s)", "")
txt = txt.replace(re,
    function (s0,s1,s2,s3) {
        if (s2 == a){return s1+b+s3} else return s1+a+s3
    }
)
WScript.StdOut.Write(txt)COPY

TOP

回复 9# apang


    真棒,我试了第一段就成功了!!完全达到目的

TOP

返回列表