中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-26 22:40
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 条件文本文件替换[已解答] 查看 3,076 回复 45
31 仔细研究发现,还可以把问题作如下改动: 发表于 2007-09-25 19:15 ·  中国 新疆 乌鲁木齐 电信
初级用户
积分 97
发帖 41
注册 2007-08-30 19:05
18年会员
UID 96211
性别 男
状态 离线
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 发表于 2007-09-25 21:23 ·  中国 江苏 常州 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
@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 发表于 2007-09-26 00:58 ·  中国 北京 广电网
初级用户
★★
积分 128
发帖 59
注册 2007-09-15 23:03
18年会员
UID 97496
性别 男
状态 离线
我来贴个复杂的。。。

@echo off
cd.>new.txt
setlocal enabledelayedexpansion
set m=0
set a=0
set b=0
set cd_name=tackmoneys_0
set ab_name1=goodpaIp
set ab_name2=tackmoneys
for /f "delims=" %%i in (cd.txt) do (
call :cdcd %%i
)
for /f "delims=" %%y in (ab.txt) do (
call :abab %%y
)
for /f "delims=" %%y in (ab.txt) do (
set str=%%y
set str=!str:%ab_result1%=%cd_result%!
set str=!str:%ab_result2%=%cd_result%!
echo !str!>>new.txt
)

:abab
if "%1" == "" exit /b
if "%a%" == "1" (
set ab_result1=%1
for /f "tokens=1,2 delims=:" %%i in ("!ab_result1!") do set ab_result1=%%i
set a=0
exit /b
)
if "%b%" == "1" (
set ab_result2=%1
for /f "tokens=1,2 delims=:" %%i in ("!ab_result2!") do set ab_result2=%%i
set b=0
exit /b
)
if "%1" == "%ab_name1%" set a=1
if "%1" == "%ab_name2%" set b=1
shift
goto abab

:cdcd
if "%1" == "" exit /b
if "%m%" == "1" (
set cd_result=%1
set m=0
exit /b
)
if "%1" == "%cd_name%" set m=1
shift
goto cdcd

pause

123问题好多啊。,哈哈

[ Last edited by yoyodos on 2007-9-26 at 01:00 AM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
123cainiao +2 2007-09-26 10:56
34 发表于 2007-09-26 10:54 ·  中国 新疆 乌鲁木齐 电信
初级用户
积分 97
发帖 41
注册 2007-08-30 19:05
18年会员
UID 96211
性别 男
状态 离线
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 发表于 2007-09-26 10:56 ·  中国 新疆 乌鲁木齐 电信
初级用户
积分 97
发帖 41
注册 2007-08-30 19:05
18年会员
UID 96211
性别 男
状态 离线
Originally posted by yoyodos at 2007-9-26 12:58 AM:
我来贴个复杂的。。。

@echo off
cd.>new.txt
setlocal enabledelayedexpansion
set m=0
set a=0
set b=0
set cd_name=tackmoneys_0
set ab_name1=goodpaIp
set ab_name2=tackmone ...


这段程序虽然复杂的多,但经过反复测试,均表现正常!
36 发表于 2007-09-26 11:04 ·  中国 北京 广电网
初级用户
★★
积分 128
发帖 59
注册 2007-09-15 23:03
18年会员
UID 97496
性别 男
状态 离线
terse写的没错拉,ab1.txt ab2.txt都是临时文件,每次删除了就ok了。呵呵
37 发表于 2007-09-26 11:10 ·  中国 北京 广电网
初级用户
★★
积分 128
发帖 59
注册 2007-09-15 23:03
18年会员
UID 97496
性别 男
状态 离线
terse是通过特殊字符找ip的,我那个是通过指定的字符串的位置找ip的,思路不同罢了。
^_^
38 发表于 2007-09-26 11:27 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
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 发表于 2007-09-26 13:06 ·  中国 新疆 乌鲁木齐 电信
初级用户
积分 97
发帖 41
注册 2007-08-30 19:05
18年会员
UID 96211
性别 男
状态 离线
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 发表于 2007-09-26 15:03 ·  中国 北京 广电网
初级用户
★★
积分 128
发帖 59
注册 2007-09-15 23:03
18年会员
UID 97496
性别 男
状态 离线
123继续出题呀.哈哈
41 发表于 2007-09-26 16:32 ·  中国 江苏 无锡 联通
初级用户
★★
积分 128
发帖 56
注册 2007-09-26 15:37
18年会员
UID 98321
性别 男
来自 江苏 无锡
状态 离线
我是菜鸟,刚来,我想请教一下各位,如何根据用户在窗口中输入的值来把指定文件中的某一字符串给替换掉。
比如有一个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 发表于 2007-09-26 16:41 ·  中国 江苏 无锡 联通
初级用户
★★
积分 128
发帖 56
注册 2007-09-26 15:37
18年会员
UID 98321
性别 男
来自 江苏 无锡
状态 离线
没人回答我啊?555555
我是菜鸟,大家都照顾点............
等待中。。。。。。。。。
43 发表于 2007-09-26 16:54 ·  中国 香港 腾讯云
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
19年会员
UID 75624
性别 男
状态 离线
不是不回答,这种问题,请先搜索论坛,实在没有再提问吧
44 发表于 2007-09-26 16:56 ·  中国 江苏 常州 武进区 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
@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
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
yyf0346 +1 2007-09-26 18:04
45 发表于 2007-09-26 18:03 ·  中国 江苏 无锡 联通
初级用户
★★
积分 128
发帖 56
注册 2007-09-26 15:37
18年会员
UID 98321
性别 男
来自 江苏 无锡
状态 离线
:D
谢谢多谢以及不甚感谢!,由于刚来,有很多地方都不是很明白,可能我问的问题论坛里都有了,以后我会先查找论坛资源再发问的了,还请多多关照了....
论坛跳转: