中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-08 13:13
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何使用FOR和FIDNDTR来改变如下代码 查看 720 回复 9
楼 主 如何使用FOR和FIDNDTR来改变如下代码 发表于 2008-05-10 19:06 ·  中国 江西 南昌 电信
初级用户
积分 82
发帖 34
注册 2008-04-29 19:37
18年会员
UID 117307
性别 男
来自 江西
状态 离线
我想把以下代码中Delay后面的数字都改成30,而且不改变它们的位置
MoveTo 7,68
MoveTo 81,91
KeyDown 16,1
KeyDown 17,1
Delay 78
KeyUp 16,1
Delay 16
KeyUp 17,1
Delay 78
KeyDown 17,1
KeyDown 16,1
Delay 62
KeyUp 17,1
Delay 1562
KeyDown 49,1
Delay 157
KeyUp 49,1
2 发表于 2008-05-10 19:14 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线

@echo off
for /f "tokens=1* delims= " %%a in (a.txt) do (
if /i "%%a"=="delay" (echo %%a 30) else echo %%a %%b
)
pause
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
wfy150 +1 2008-05-10 19:39
nipo +2 2008-05-10 23:53
致精致简!
3 发表于 2008-05-10 20:47 ·  中国 江西 南昌 电信
初级用户
积分 82
发帖 34
注册 2008-04-29 19:37
18年会员
UID 117307
性别 男
来自 江西
状态 离线
问下怎么把它输出的结果保存到.TXT中
4 发表于 2008-05-10 22:06 ·  中国 湖北 武汉 联通
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
Originally posted by wfy150 at 2008-5-10 20:47:
问下怎么把它输出的结果保存到.TXT中

在每个 echo 命令后面加上一个重定向符(>>)即可。
5 发表于 2008-05-10 23:57 ·  中国 辽宁 锦州 联通
中级用户
★★
积分 228
发帖 106
注册 2008-04-26 12:34
18年会员
UID 117003
性别 男
状态 离线
Originally posted by 26933062 at 2008-5-10 07:14 PM:

@echo off
for /f "tokens=1* delims= " %%a in (a.txt) do (
if /i "%%a"=="delay" (echo %%a 30) else echo %%a %%b
)
pause



领教了,佩服!


有一点不懂,请指教:~~~%%b事先没有定义,它是怎样产生作用的呢?
6 发表于 2008-05-11 00:32 ·  中国 辽宁 锦州 联通
中级用户
★★
积分 228
发帖 106
注册 2008-04-26 12:34
18年会员
UID 117003
性别 男
状态 离线
晕!

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将
每行中的第二个和第三个符号传递给 for 程序体;用逗号和/或
空格定界符号。请注意,这个 for 程序体的语句引用 %i 来
取得第二个符号,引用 %j 来取得第三个符号,引用 %k
来取得第三个符号后的所有剩余符号。对于带有空格的文件
名,您需要用双引号将文件名括起来。为了用这种方式来使
用双引号,您还需要使用 usebackq 选项,否则,双引号会
被理解成是用作定义某个要分析的字符串的。

%i 专门在 for 语句中得到说明,%j 和 %k 是通过
tokens= 选项专门得到说明的。您可以通过 tokens= 一行
指定最多 26 个符号,只要不试图说明一个高于字母 'z' 或
'Z' 的变量。请记住,FOR 变量是单一字母、分大小写和全局的;而且,
同时不能有 52 个以上都在使用中。
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
moniuming +4 2008-05-11 00:52
7 发表于 2008-05-11 00:55 ·  中国 广西 中移铁通
银牌会员
★★★
永远的菜鸟
积分 1,335
发帖 574
注册 2007-11-27 12:50
18年会员
UID 103929
性别 男
来自 广西
状态 离线
我更喜欢自己看帮助去解决问题的人,加分鼓励!!!
8 发表于 2008-05-11 01:34 ·  中国 辽宁 锦州 联通
中级用户
★★
积分 228
发帖 106
注册 2008-04-26 12:34
18年会员
UID 117003
性别 男
状态 离线
谢谢鼓励!~~~本来是提了一个愚蠢的问题。呵呵^-^
9 发表于 2008-05-11 01:45 ·  中国 江西 南昌 电信
初级用户
积分 82
发帖 34
注册 2008-04-29 19:37
18年会员
UID 117307
性别 男
来自 江西
状态 离线
原来也想这么干 忘了在给前面一个ECHO加重定向了.谢谢斑竹了
10 发表于 2008-05-11 04:43 ·  中国 广东 佛山 禅城区 电信
初级用户
积分 87
发帖 42
注册 2008-05-07 23:37
18年会员
UID 118057
性别 男
状态 离线
完整的答案应该是这样吧
@echo off
cd.>b.txt
for /f "tokens=1* delims= " %%a in (a.txt) do (
if /i "%%a"=="delay" (echo %%a 30 >>b.txt) else echo %%a %%b>>b.txt
)
ren a.txt a_old.txt
ren b.txt a.txt
pause
论坛跳转: