标题: [文本处理] BAT批处理怎样读取ini内容设置变量? [打印本页]
作者: zhong365 时间: 2014-5-30 10:57 标题: 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.1
复制代码
如上图,我要实现从这个ini文件获取第二行 末位数值。。
也就是tcpip001=192.168.1.10;192.168.1.1 的末位数值
并判断
如果末位 是1 就更改成 2
如果末位 是2 就更改成 1
该行主要是有 = ; 分隔符 所以不怎么会弄。。原来解答的人希望可以讲解下代码。
作者: DAIC 时间: 2014-5-30 11:15
把文件内容发出来,不要截图。
作者: zhong365 时间: 2014-5-30 14:43
回复 2# DAIC
已经把文字补上去了,希望你可以帮帮忙!!
作者: gavinchou 时间: 2014-5-30 15:16
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
你按照这个思路改改,现在没空调试
作者: DAIC 时间: 2014-5-30 15:19
- @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.ini
复制代码
作者: apang 时间: 2014-5-30 15:29
- @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
- pause
复制代码
作者: zhong365 时间: 2014-5-31 14:54
回复 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 ,
作者: zhong365 时间: 2014-5-31 14:54
回复 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 ,
作者: apang 时间: 2014-5-31 22:21
本帖最后由 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%"
- pause
复制代码
或者这样试试:- @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)
复制代码
作者: zhong365 时间: 2014-6-1 00:07
回复 9# apang
真棒,我试了第一段就成功了!!完全达到目的
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |