中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-25 23:36
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,275 会员排行
DOS批处理 & 脚本技术(批处理室) » 条件文本文件替换[已解答]
可打印版本  3,723 / 45
第31楼 123cainiao 发表于 2007-09-25 19:15
初级用户 发帖 41 积分 97
仔细研究发现,还可以把问题作如下改动:
ab.txt文件的内容如下:
[abcd]
doorCount = 1
goodpaIp = 127.0.0.1:8383
Max = 125
tackmoneys = 127.0.0.1:8086
doorCounttc = 12
doorCountwkl= 18
doorCountasd = 20

cd.txt文件内容如下:

[abcd]=
goodpaIp_name= goodip
tackmoneys_0=127.128.225.18
doorCounttc = 8
doorCountwkl= 185
doorCountasd = 20

现在可否从cd.txt文件里提取127.128.225.18来更新ab.txt文件
新生成的ab.txt文件为:
[abcd]
doorCount = 1
goodpaIp = 127.128.225.18:8383
Max = 125
tackmoneys = 127.128.225.18:8086
doorCounttc = 12
doorCountwkl= 18
doorCountasd = 20

请注意:127.128.225.18这个的位数先假设是变动的,也就是说即使他变成12.11.23.11或者其余位数的ip,都能实现完整替换。
.
第32楼 terse 发表于 2007-09-25 21:23
银牌会员 发帖 946 积分 2,404
@echo off
setlocal enabledelayedexpansion
ren ab.txt ab1.txt
for /f "tokens=1,2,3 delims==:" %%i in ('type cd.txt^|find /i "tackmoneys"') do set data=%%j
for /f "tokens=1,2,3 delims==: " %%i in ('type ab1.txt^|find /i "goodpaIp"') do set data1=%%j
for /f "tokens=1,2,3 delims==: " %%i in ('type ab1.txt^|find /i "tackmoneys"') do set data2=%%j
if !data! equ !data1! if !data! equ !data2! goto :eof
for /f "tokens=* delims==: " %%i in (ab1.txt) do (
set m=%%i
set m=!m:%data1%=%data%!
set m=!m:%data2%=%data%!
echo !m! >>ab2.txt
)
ren ab2.txt ab.txt
pause
第33楼 yoyodos 发表于 2007-09-26 00:58
初级用户 发帖 59 积分 128
我来贴个复杂的。。。

123问题好多啊。,哈哈

[ Last edited by yoyodos on 2007-9-26 at 01:00 AM ]
第34楼 123cainiao 发表于 2007-09-26 10:54
初级用户 发帖 41 积分 97
Originally posted by terse at 2007-9-25 09:23 PM:
@echo off
setlocal enabledelayedexpansion
ren ab.txt ab1.txt
for /f "tokens=1,2,3 delims==:" %%i in ('type cd.txt^|find /i "tackmoneys"') do set data=%%j
for /f "tokens ...

这段程序,反复测试,发现存在一个问题:
程序第一次运行,会生成一个ab1.txt和ab.txt里文件的参数一致,替换成功。
随便修改一下cd.txt里的值,再重新运行程序(不删除前次生成的ab1.txt)
发现提示文件重复,这时会生成ab2.txt,而且只有ab2.txt替换成功,ab.txt和ab1.txt均无变化。
再次修改一下cd.txt里的值,再重新运行程序(不删除前次生成的ab1.txt和ab2.txt)

结果程序提示文件重复,新的替换值以整体累加的形式出现在ab2.txt文件里,其余文件无替换。
第35楼 123cainiao 发表于 2007-09-26 10:56
初级用户 发帖 41 积分 97
Originally posted by yoyodos at 2007-9-26 12:58 AM:
我来贴个复杂的。。。
第36楼 yoyodos 发表于 2007-09-26 11:04
初级用户 发帖 59 积分 128
terse写的没错拉,ab1.txt ab2.txt都是临时文件,每次删除了就ok了。呵呵
第37楼 yoyodos 发表于 2007-09-26 11:10
初级用户 发帖 59 积分 128
terse是通过特殊字符找ip的,我那个是通过指定的字符串的位置找ip的,思路不同罢了。
^_^
第38楼 terse 发表于 2007-09-26 11:27
银牌会员 发帖 946 积分 2,404
Originally posted by 123cainiao at 2007-9-26 10:54:

这段程序,反复测试,发现存在一个问题:
程序第一次运行,会生成一个ab1.txt和ab.txt里文件的参数一致,替换成功。
随便修改一下cd.txt里的值,再 ...

ab1.txt 只是原ab.txt的备份而已 可以去掉这一步
或者这样试一下
@echo off
setlocal enabledelayedexpansion
cd.>ab2.txt
for /f "tokens=1,2,3 delims==:" %%i in ('type cd.txt^|find /i "tackmoneys"') do set data=%%j
for /f "tokens=1,2,3 delims==: " %%i in ('type ab.txt^|find /i "goodpaIp"') do set data1=%%j
for /f "tokens=1,2,3 delims==: " %%i in ('type ab.txt^|find /i "tackmoneys"') do set data2=%%j
if !data! equ !data1! if !data! equ !data2! goto :eof
for /f "tokens=* delims==: " %%i in (ab.txt) do (
set m=%%i
set m=!m:%data1%=%data%!
set m=!m:%data2%=%data%!
echo !m! >>ab2.txt
)
del ab.txt
ren ab2.txt ab.txt
pause
第39楼 123cainiao 发表于 2007-09-26 13:06
初级用户 发帖 41 积分 97
Originally posted by terse at 2007-9-26 11:27 AM:

ab1.txt 只是原ab.txt的备份而已 可以去掉这一步
或者这样试一下
@echo off
setlocal enabledelayedexpansion
cd.>ab2.txt
for /f "tokens=1,2,3 delims==:" %%i in ( ...


测试完毕,程序完全正常!
谢谢回复!
以上所有参考答案,仔细研究,融会贯通,完全可以解决类似文本字符串替换的其他问题。再次感谢所有回帖网友!
第40楼 yoyodos 发表于 2007-09-26 15:03
初级用户 发帖 59 积分 128
123继续出题呀.哈哈
第41楼 yyf0346 发表于 2007-09-26 16:32
初级用户 发帖 56 积分 128 来自 江苏 无锡
我是菜鸟,刚来,我想请教一下各位,如何根据用户在窗口中输入的值来把指定文件中的某一字符串给替换掉。
比如有一个a.sql文件,和b.bat文件在同一个目录内,a.sql文件内有段内容:
EXECUTE @ReturnCode = msdb.dbo.sp_add_job @job_id = @JobID OUTPUT , @job_name = N'预定检查', @owner_login_name = N'localhost\Administrator', @description = N'没有可用的描述。', @category_name = N'[Uncategorized (Local)]', @enabled = 1, @notify_level_email = 0, @notify_level_page = 0, @notify_level_netsend = 0, @notify_level_eventlog = 2, @delete_level= 0
. . . . . . .

如何写b.bat文件,把其中的localhost换成用户输入的一个字符串;
又比如有一个INI文件夹里有一个a.INI文件,内容如下:
[CONNECT_DB]
CONNECTSTRING="Provider=SQLOLEDB.1;Password=MTIzNDU2;Persist Security Info=True;User ID=SA;Initial Catalog=HXGL_DB;Data Source=localhost\SQLEXPRESS1"
LatestLogin=admin
. . . . . .

此INI文件夹和b.bat不在一个目录结构内,要把localhost\SQLEXPRESS1换成用户输入的字符该怎么办?
我知道和用户交互是 SET /P char=请输入字符串:
那么怎么把这个用户输入的字符串按照上边的想法操作呢?我是在公司应用的,有谁能帮帮我啊?在此先谢谢大家了!
第42楼 yyf0346 发表于 2007-09-26 16:41
初级用户 发帖 56 积分 128 来自 江苏 无锡
没人回答我啊?555555
我是菜鸟,大家都照顾点............
等待中。。。。。。。。。
第43楼 wudixin96 发表于 2007-09-26 16:54
银牌会员 发帖 931 积分 1,928
不是不回答,这种问题,请先搜索论坛,实在没有再提问吧
第44楼 terse 发表于 2007-09-26 16:56
银牌会员 发帖 946 积分 2,404
@echo off
setlocal ENABLEDELAYEDEXPANSION
set str1=localhost\SQLEXPRESS1
SET /P STR2=输入替换字符
for /f "delims=" %%i in (路径\a.ini) do (
set str=%%i
set str=!str:%str1%=%str2%!
echo !str!>>路径\b.ini
)
pause
第45楼 yyf0346 发表于 2007-09-26 18:03
初级用户 发帖 56 积分 128 来自 江苏 无锡
:D
谢谢多谢以及不甚感谢!,由于刚来,有很多地方都不是很明白,可能我问的问题论坛里都有了,以后我会先查找论坛资源再发问的了,还请多多关照了....
上一页  1 2 3 4  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023