中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-11 17:10
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]FOR 引用变量完成替换 查看 716 回复 8
楼 主 [已结]FOR 引用变量完成替换 发表于 2009-04-13 06:06 ·  中国 湖南 长沙 电信
初级用户
★★
积分 103
发帖 52
注册 2007-04-13 05:20
19年会员
UID 84975
性别 男
状态 离线
1.txt内容如下:
100	我
101 你
102 他

2.txt内容如下:
名称一	100
名称二 101
名称三 102

a.txt内容如下:
我走在街上看到你
说他不在家



如果1.txt中的第一列和2.txt中的第二列相等,则替换a.txt中值为“1.txt第二列”的内容变为“2.txt第一列”的内容。
b.txt内容如下:
名称一走在街上看到名称二
说名称三不在家


正确答案见5楼。

[ Last edited by flybird2020 on 2009-4-13 at 12:57 ]
2 发表于 2009-04-13 06:36 ·  中国 湖南 长沙 电信
初级用户
★★
积分 103
发帖 52
注册 2007-04-13 05:20
19年会员
UID 84975
性别 男
状态 离线
@echo debug
if exist oo.bat del oo.bat/f/q
>>oo.bat echo for /f "tokens=*" %%%%a in (a.txt) do (
>>oo.bat echo set var=%%%%a
setlocal enabledelayedexpansion
for /f "tokens=1,2 delims= " %%a in (1.txt) do (
for /f "tokens=1,2 delims= " %%A in (2.txt) do (
set oldnum=%%a
set oldword=%%b
set newword=%%A
set newnum=%%B
if "!newnum!"=="!oldnum!" call :resetit
))

echo ^>^>b.txt echo ^^!var^^!>>oo.bat
echo )>>oo.bat
call oo.bat
goto :eof
:resetit
>>oo.bat echo set "var=^!var:!oldword!=!newword!^!"

笨方法达到要求,希望达人能给出好答案,谢谢了
3 发表于 2009-04-13 07:49 ·  中国 北京 联通
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
这个是不是什么敏感词过滤的东东啊

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
4 发表于 2009-04-13 09:44 ·  中国 北京 联通
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
@echo off

for /f "tokens=1,2" %%a in (1.txt) do (
for /f "tokens=1,2" %%x in ('findstr -ric:".*%%a$" 2.txt') do (
fr a.txt -f:"%%b" -t:"%%x"
)
)
pause

FR 下载: http://baiy.cn/utils/fr/index.htm

FR 在这里用主要是为了攸改原文件方便

[ Last edited by yishanju on 2009-4-13 at 09:46 ]

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
5 发表于 2009-04-13 12:05 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1,2" %%a in (1.txt) do set $%%a=%%b
for /f "tokens=1,2" %%a in (2.txt) do set #!$%%b!=%%a
for /f "delims=" %%a in (a.txt) do (
set "str=%%a"
for /f "tokens=1,2 delims==#" %%b in ('set #') do (set str=!str:%%b=%%c!)
echo/!str!
)
pause


[ Last edited by netbenton on 2009-4-13 at 10:31 ]
精简
=> 个人网志
6 发表于 2009-04-13 12:19 ·  中国 北京 联通
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
为什么你思路总是可以神奇到这种地步

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
7 发表于 2009-04-13 12:28 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
出于对dos的热爱吧。也不是什么神奇,只要认为它可行,就可行,有时候是暂时想不到办法而已。


君的正则表达式用法,可以说是出神入化呀!
精简
=> 个人网志
8 发表于 2009-04-13 12:44 ·  中国 北京 联通
银牌会员
★★★★
[b]看你妹啊[/b]
积分 1,488
发帖 1,357
注册 2006-05-20 12:00
20年会员
UID 55770
状态 离线
晕,那还不是反复查手册出来的
会的都会这样写

有问题请发论坛或者自行搜索,再短消息问我的统统是SB
9 发表于 2009-04-13 12:55 ·  中国 湖南 长沙 电信
初级用户
★★
积分 103
发帖 52
注册 2007-04-13 05:20
19年会员
UID 84975
性别 男
状态 离线
谢谢二位的帮助,netbenton的思路真巧妙,学习了。
yishanju的还看不懂。。。(这个不是过滤的,说来话长。。。不说也罢。。。)
我的就太丑陋了,都不太好意思放这了,哈哈

OK就此封帖。

[ Last edited by flybird2020 on 2009-4-13 at 13:07 ]
论坛跳转: