标题: [文本处理] [已解决]批处理怎样修改多个不同路径下同一文件名的配置文件文本? [打印本页]
作者: cuteai 时间: 2013-1-24 16:17 标题: [已解决]批处理怎样修改多个不同路径下同一文件名的配置文件文本?
需求是修改多个路径下的同一文件名的配置文件global.properties 将里面的192.168.8.103换成用户手动输入的IP
学着写了一点如下:- @echo off
- setlocal enabledelayedexpansion
- set a_dir=%~dp0\1
- set b_dir=%~dp0\2
- set c_dir=%~dp0\3
- set d_dir=%~dp0\4
- set replaced=192.168.8.103
- set all=
- set /p all=请输入替换的IP地址:
- for %%a in (%a_dir% %b_dir% %c_dir% %d_dir%) do (
- sed -i "s/%replaced%/%all%/g" "%%a\global.properties"
- )
- pause
复制代码
运行结果如下:- C:\DOCUME~1\ADMINI~1\??\???~1>(sed -i "s/192.168.8.103/192.168.8.210/g" "and\glo
- C:\DOCUME~1\ADMINI~1\??\???~1>(sed -i "s/192.168.8.103/192.168.8.210/g" "Setting
- s\Administrator\??\?????\\1\global.properties" )
- C:\DOCUME~1\ADMINI~1\??\???~1>(sed -i "s/192.168.8.103/192.168.8.210/g" "C:\Docu
- ments\global.properties" )
- C:\DOCUME~1\ADMINI~1\??\???~1>(sed -i "s/192.168.8.103/192.168.8.210/g" "and\glo
- bal.properties" )
- C:\DOCUME~1\ADMINI~1\??\???~1>(sed -i "s/192.168.8.103/192.168.8.210/g" "Setting
- s\Administrator\??\?????\\2\global.properties" )
- C:\DOCUME~1\ADMINI~1\??\???~1>pause-i "s/192.168.8.103/192.168.8.210/g" "Setting
- Press any key to continue . . . al.properties" )
复制代码
功能没有实现,请指正哪些地方写错了
作者: BAT-VBS 时间: 2013-1-24 20:57
- @echo off
- set replaced=192.168.8.103
- set all=
- set /p all=请输入替换的IP地址:
- for /l %%a in (1,1,4) do (
- sed -i "s/%replaced%/%all%/g" "%~dp0%%a\global.properties"
- )
复制代码
作者: cuteai 时间: 2013-1-25 09:38
回复 2# BAT-VBS
感谢帮助,可能是我描述的不是很清楚,1-4的文件夹名只是用来打个比方,实际上global.properties文件所在路径并不是规律的,而且路径很长
所以当时我写的时候有set a_dir b_dir...... 就是这个考虑
作者: apang 时间: 2013-1-25 10:00
第10行- for %%a in ("%a_dir%" "%b_dir%" "%c_dir%" "%d_dir%") do (
复制代码
第11行%%a改成%%~a
作者: cuteai 时间: 2013-1-25 11:11
回复 4# apang
按照你的思路 我修改了一下,可以实现功能,非常感谢
贴出整段代码如下:- @echo off
- setlocal enabledelayedexpansion
- set a_dir=%~dp0\1\1\2
- set b_dir=%~dp0\2\1\2\3
- set c_dir=%~dp0\3\1
- set d_dir=%~dp0\4\1\2\3\4
- set replaced=192.168.8.103
- set all=
- set /p all=请输入替换的IP地址:
- for %%a in ("%a_dir%" "%b_dir%" "%c_dir%" "%d_dir%") do (
- sed -i "s/%replaced%/%all%/g" "%%~a\global.properties"
- )
- pause
复制代码
作者: cuteai 时间: 2013-1-25 17:03
我按照apang这位兄弟说的那样修改之后 以楼上那段代码来测试 可以实现功能了
现在我实际应用的时候
只修改了路径那块- set a_dir=%~dp0\T8APP\GCM\resource
- set b_dir=%~dp0\T8APP\MCM\resource
- set c_dir=%~dp0\resin-pro-3.1.8\webapps\portal\WEB-INF\classes\com\trisun\portal\resources
- set d_dir=%~dp0\resin-pro-3.1.8\webapps\T81\WEB-INF\classes\com\trisun\T81\resources
- set e_dir=%~dp0\resin-pro-3.1.8\webapps\T82A\WEB-INF\classes\com\trisun\T82A\resources
复制代码
其他没有变动,结果就报错了。。。- C:\Documents and Settings\Administrator\桌面\新建文件夹>(sed -i "s/192.168.8.103/192.168.8.210/g" "
- C:\Documents and Settings\Administrator\桌面\新建文件夹\\resin-pro-3.1.8\webapps\portal\WEB-INF\cla
- sses\com\trisun\portal\resources\global.properties" )
- 系统无法执行指定的程序。
复制代码
请问该如何解决
作者: apang 时间: 2013-1-25 17:38
回复 6# cuteai
所有的%~dp0\改成%~dp0
作者: cuteai 时间: 2013-1-25 17:48
回复 7# apang
将%~dp0\改成%~dp0后 仍然显示 系统无法执行指定的程序。
我将路径用""括起来后 倒是没有报错了
显示如下:- C:\DOCUME~1\ADMINI~1\??\???~1>(sed -i "s/192.168.8.103 /192.168.8.210/g" "and\gl
- C:\DOCUME~1\ADMINI~1\??\???~1>(sed -i "s/192.168.8.103 /192.168.8.210/g" "Settin
- gs\Administrator\??\?????\T8APP\GCM\resource""\global.properties" )
- C:\DOCUME~1\ADMINI~1\??\???~1>(sed -i "s/192.168.8.103 /192.168.8.210/g" ""C:\Do
- cuments\global.properties" )
- C:\DOCUME~1\ADMINI~1\??\???~1>(sed -i "s/192.168.8.103 /192.168.8.210/g" "and\gl
- obal.properties" )
- C:\DOCUME~1\ADMINI~1\??\???~1>(sed -i "s/192.168.8.103 /192.168.8.210/g" "Settin
- C:\DOCUME~1\ADMINI~1\??\???~1>(sed -i "s/192.168.8.103 /192.168.8.210/g" "Settin
- gs\Administrator\??\?????\resin-pro-3.1.8\webapps\T82A\WEB-INF\classes\com\trisu
- n\T82A\resources""\global.properties" ) " )
- ????????????
- C:\DOCUME~1\ADMINI~1\??\???~1>pause-i "s/192.168.8.103 /192.168.8.210/g" ""C:\Do
- Press any key to continue . . .
复制代码
但是文件并没有修改成功,里面的IP还是192.168.8.103
作者: BAT-VBS 时间: 2013-1-25 19:15
回复 8# cuteai
sed版本是?
作者: apang 时间: 2013-1-25 19:37
本帖最后由 apang 于 2013-1-25 20:19 编辑
回复 8# cuteai
Win7测试了下,确实有问题。
sed4.21:http://www.bathome.net/thread-16975-1-1.html 不清楚是不是路径太深的原因。
如果文件不是很多很大,下面的也可以的:- @echo off
- set "f=global.properties"
- set "a_dir=%~dp0T8APP\GCM\resource"
- set "b_dir=%~dp0resin-pro-3.1.8\webapps\portal\WEB-INF\classes\com\trisun\portal\resources"
- set "c_dir=%~dp0resin-pro-3.1.8\webapps\T81\WEB-INF\classes\com\trisun\T81\resources"
- set "d_dir=%~dp0resin-pro-3.1.8\webapps\T82A\WEB-INF\classes\com\trisun\T82A\resources"
- set "replaced=192.168.8.103"
- set /p all=请输入替换的IP地址:
- for %%a in ("%a_dir%" "%b_dir%" "%c_dir%" "%d_dir%") do (
- pushd "%%~a\"
- (for /f "tokens=1* delims=:"eol^= %%b in ('findstr /n .* "%f%"') do (
- set "str=%%c"
- setlocal enabledelayedexpansion
- if "!str!" neq "" set "str=!str:%replaced%=%all%!"
- echo,!str!
- endlocal
- ))>$
- move $ %f%
- popd
- )
- pause
复制代码
作者: terse 时间: 2013-1-26 18:46
本帖最后由 terse 于 2013-1-26 19:07 编辑
win7 没建议 我 xp 来的
作者: cuteai 时间: 2013-1-28 08:08
回复 9# BAT-VBS
论坛里下载的sed4.2.1单文件版
作者: cuteai 时间: 2013-1-28 08:47
回复 10# apang
操作系统环境就是XP的
另您提供的这段代码可以实现功能了,非常感谢
不过就是有些没看懂 ,我再研究下,再次表示感谢!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |