中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 19:04
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 請文如何將一的檔案中的某一行文字換成你需要的文字
楼 主 請文如何將一的檔案中的某一行文字換成你需要的文字 发表于 2005-12-07 13:04 ·  中国 台湾 中华电信(HiNet)数据中心
初级用户
★★
积分 154
发帖 54
注册 2005-09-25 01:53
UID 42804
状态 离线
假如有一檔案 Try.txt內容如下

AAA = 10.7
BBB = 11.6
CCC = 13.4
DDD = 15.8
EEE = 17.1

如果要用批次檔的方次把
"CCC    = 13.4" 

這行至換成
"CCC    = 55.33" 

這樣子應該要如何寫

謝謝
2 发表于 2005-12-11 10:57 ·  中国 台湾 新北市 中华电信
初级用户
★★
积分 154
发帖 54
注册 2005-09-25 01:53
UID 42804
状态 离线
這個問題應該會有不少人遇到
或者是需要
是太簡單了 還是 無解阿
都沒消沒息的@@
3 发表于 2005-12-11 11:29 ·  加拿大 Bell
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
UID 9
状态 离线
允許使用第三方工具麼?如果允許的話,可以試試XCHANGE之類的工具,一行就可以解決。例如試試這條命令(XCHANGE見附件):

XCHANGE Try.txt "CCC = 13.4" "CCC = 55.33"
附件
XCHANGE.EXE (22.04 KiB, 下载附件所需积分 1 点, 下载次数: 94)
Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

4 发表于 2005-12-11 14:30 ·  中国 福建 泉州 电信
初级用户
积分 51
发帖 14
注册 2005-11-06 20:02
UID 44706
性别 男
状态 离线
有这个工具的应用祥解吗?
5 发表于 2006-01-12 20:18 ·  中国 甘肃 兰州 电信
初级用户
积分 90
发帖 38
注册 2006-01-06 18:41
UID 48522
状态 离线
@echo off & setlocal EnableDelayedExpansion
echo.>n_try.txt
for /f "tokens=1,2,3*" %%i in (try.txt) do set var1=%%i && if "CCC " == "!var1!" (echo CCC = 55.33>>n_try.txt) else (echo %%i %%j %%k>>n_try.txt)
pause
6 发表于 2006-01-13 14:00 ·  中国 河北 唐山 联通
版主
★★★
操作系统爱好者
积分 1,113
发帖 392
注册 2002-11-11 00:00
UID 228
性别 男
状态 离线
我用 HEXC,只有5KB,比XCHANGE更小巧,但功能简单了一些,够用了。
hexc Try.txt Try.txt "CCC = 13.4" "CCC = 55.33" /u
附件
HEXC.rar (4.21 KiB, 下载附件所需积分 1 点, 下载次数: 57)
DOS之家 http://doshome.com 站长 葛明阳
7 发表于 2006-01-14 22:17 ·  中国 湖北 武汉 电信
初级用户
积分 97
发帖 32
注册 2005-12-03 19:43
UID 46432
性别 男
状态 离线
最好不要使用第三方工具,否则无法实现批处理的价值
8 发表于 2006-01-15 20:06 ·  中国 山西 运城 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re vptdosme:

arding 兄在5楼提供的程序,即是 CMD 下没有使用第三方程序,若想在 Win9x/DOS 下实现,则会复杂很多,需要使用文本遍历算法或者利用ASCII汇编器echo出一个类似的替换程序进行替换,除非确有必要,一般不建议采用。
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
9 发表于 2006-02-16 09:57 ·  中国 台湾 中华电信(HiNet)数据中心
初级用户
★★
积分 154
发帖 54
注册 2005-09-25 01:53
UID 42804
状态 离线
Originally posted by Wengier at 2005-12-11 11:29:
允許使用第三方工具麼?如果允許的話,可以試試XCHANGE之類的工具,一行就可以解決。例如試試這條命令(XCHANGE見附件):

XCHANGE Try.txt "CCC ...

對不起這個方好好像不行
因為 CCC =12.5 #TEST
要是 CCC =12.5 #TEST
每個人修改後的空格數不固定所以我的標題才會寫
修改特定一行資料
而版大提出來的是字串 所以可否幫忙解決一下
謝謝
10 发表于 2006-02-16 10:09 ·  中国 台湾 中华电信(HiNet)数据中心
初级用户
★★
积分 154
发帖 54
注册 2005-09-25 01:53
UID 42804
状态 离线
Originally posted by arding at 2006-1-12 20:18:
@echo off & setlocal EnableDelayedExpansion
echo.>n_try.txt
for /f "tokens=1,2,3*" %%i in (try.txt) do set var1=%%i && if "CCC " == "!var1!" (ec ...

這個方式的確可以修改 但是有個問題 他會砍資料 就是當你的空格適用TAB鍵產生的 後段的資料全部砍掉 有辦法克服嗎 謝謝
修改 11b_ATTEN_DUT_PM 這行


原始資料

11b_ATTEN_DUT_SA = 15.5; # Attenuation at 2.5GHz between DUT and spectrum analyzer (double)
11b_ATTEN_FIXED_DUT_GOLDEN = 41.8; # Fixed attenuation at 2.5GHz between DUT and GOLDEN (double)
11b_ATTEN_DUT_PM = 21.4; # Attenuation at 2.5GHz between DUT and power meter (double)


執行後資料

11b_ATTEN_DUT_SA = 15.5;
11b_ATTEN_FIXED_DUT_GOLDEN = 41.8;
11b_ATTEN_DUT_PM = 33.55;
11 发表于 2006-02-16 11:45 ·  中国 山西 大同 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re dosfroum:

这与 tab 没有什么关系,for /f 缺省时是承认 tab 作为切分符的。主要是因为原程序中遗漏了 %%l 的输出。例句如下:


@echo off
if exist tabo.txt del tabo.txt
for /f "tokens=1,2,3*" %%i in (tab.txt) do (
if "%%i"=="11b_ATTEN_DUT_PM" (echo %%i %%j 33.55 %%l>>tabo.txt) else (echo %%i %%j %%k %%l>>tabo.txt)
)
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
12 发表于 2006-02-16 22:52 ·  中国 广东 云浮 电信
荣誉版主
★★★
积分 718
发帖 313
注册 2005-09-26 00:00
UID 42844
性别 男
状态 离线
Re willsort:

你的程序有小失误,把分号给丢失了。另,程序没有产生 dosfroum 希望的“执行后资料”;而把后边注释跟进了。
13 发表于 2006-02-17 09:02 ·  中国 山西 大同 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re 220110:

分号确实是我的疏忽,时间所限,没有进行严格的测试。至于注释,我的理解是 dosfroum 兄是希望保留着些注释信息的,至于这些信息失去了原来的对齐效果,那就是 for /f 的局限所在了,可以考虑将%%i %%j %%k %%l 之间的空格改为Tab,但是效果仍然未必十分理想。如果使用 awk 的话,就可以使用类似C语言 printf 的函数来实现文本对齐了。
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
14 发表于 2006-02-17 15:25 ·  中国 台湾 中华电信(HiNet)数据中心
初级用户
★★
积分 154
发帖 54
注册 2005-09-25 01:53
UID 42804
状态 离线
請問可以改成 除了 那行以外的資料能不去變動嗎
好多空白被拿掉了 不過已經比之前的好很多了
感謝!!

執行前

11b_ATTEN_DUT_SA = 15.5; # Attenuation at 2.5GHz between DUT and spectrum analyzer (double)
11b_ATTEN_FIXED_DUT_GOLDEN = 41.8; # Fixed attenuation at 2.5GHz between DUT and GOLDEN (double)
11b_ATTEN_DUT_PM = 21.4; # Attenuation at 2.5GHz between DUT and power meter (double)

2442 0 -85 0 -90 1 1111 0 0 6.0
# 2447 1 -85 0 -90 0 1111 0 1 6.0
# 2452 1 -85 0 -90 0 1111 0 1 6.0
# 2457 1 -85 0 -90 0 1111 0 1 6.0
# 2462 1 -85 0 -90 0 1111 0 1 6.0
# 2467 1 -85 0 -90 0 1111 0 1 6.0
# 2472 1 -85 0 -90 0 1111 0 1 6.0
2484 1 -85 0 -90 0 1111 0 1 6.0


執行後

11b_ATTEN_DUT_SA = 15.5; # Attenuation at 2.5GHz between DUT and spectrum analyzer (double)
11b_ATTEN_FIXED_DUT_GOLDEN = 41.8; # Fixed attenuation at 2.5GHz between DUT and GOLDEN (double)
11b_ATTEN_DUT_PM = 33.55 # Attenuation at 2.5GHz between DUT and power meter (double)

2442 0 -85 0 -90 1 1111 0 0 6.0
# 2447 1 -85 0 -90 0 1111 0 1 6.0
# 2452 1 -85 0 -90 0 1111 0 1 6.0
# 2457 1 -85 0 -90 0 1111 0 1 6.0
# 2462 1 -85 0 -90 0 1111 0 1 6.0
# 2467 1 -85 0 -90 0 1111 0 1 6.0
# 2472 1 -85 0 -90 0 1111 0 1 6.0
15 发表于 2006-02-17 15:44 ·  中国 台湾 中华电信(HiNet)数据中心
初级用户
★★
积分 154
发帖 54
注册 2005-09-25 01:53
UID 42804
状态 离线
對不起
發現另外一個問題
第一格的空白會增加
且值沒有修改到

批次檔

@Echo on
C:
CD\
attrib -R -S -A -H boot.ini
copy boot.ini+boot.txt Boot.ini

if exist temp.txt del temp.txt
for /f "tokens=1,2,3*" %%i in (boot.ini) do (
if "%%i"=="timeout" (echo %%i %%j 3 %%l>>temp.txt) else (echo %%i %%j %%k %%l>>temp.txt)
)

attrib +S +A +H boot.ini

rem del addboot.bat


原始檔


timeout=35
default=multi(0)disk(0)rdisk(0)partition(1)\WINNT

multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professional" /fastdetect


批處理後


timeout=35
default=multi(0)disk(0)rdisk(0)partition(1)\WINNT

multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professional" /fastdetect
C:\ieldr="Boot From Virtual CD"


[ Last edited by dosfroum on 2006-2-17 at 15:45 ]
论坛跳转: