中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-08 23:17
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]zw19750516 进来一下, 谢了 查看 1,704 回复 16
楼 主 [求助]zw19750516 进来一下, 谢了 发表于 2008-06-03 22:28 ·  中国 江苏 苏州 电信
高级用户
★★
五星老土
积分 558
发帖 172
注册 2003-02-09 00:00
23年会员
UID 881
性别 男
来自 江苏
状态 离线
正好又一个FOR语句的用法,请帮助我如何得到准确答案。

我的批处理test1.cmd如下

@echo off
rem hhgjg>quya.txt
rem sssss>>%systemroot%\x.txt
rem dddd>>d:\test\y
for /f "tokens=2 delims=>" %%i in (test1.cmd) do echo %%i
pause


运行结果是:

quya.txt
%systemroot%\x.txt
d:\test\y
" %%i in (复件test1.cmd) do echo %%i


我希望的结果:

quya.txt
c:\x.txt (当然C也有可能是D)
d:\test\y

该怎么做? 谢谢!
我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2 发表于 2008-06-03 22:38 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
我来可以么

@echo off
rem hhgjg>quya.txt
rem sssss>>%systemroot%\x.txt
rem dddd>>d:\test\y
for /f "tokens=2 delims=>" %%i in ('type "%~0"^|findstr "^rem"') do echo %%i
pause


[ Last edited by 26933062 on 2008-6-3 at 10:40 PM ]
致精致简!
3 发表于 2008-06-03 22:42 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线

@echo off
rem hhgjg>quya.txt
rem sssss>>%systemroot%\x.txt
rem dddd>>d:\test\y
for /f "tokens=2 delims=>" %%i in ('findstr /v "in" %0') do echo %%i
pause

ps:以后求助请不要直呼其名了,这里高手多的是,我不算什么的。

[ Last edited by zw19750516 on 2008-6-3 at 10:44 PM ]
批处理之家新域名:www.bathome.net
4 发表于 2008-06-03 22:48 ·  中国 江苏 苏州 电信
高级用户
★★
五星老土
积分 558
发帖 172
注册 2003-02-09 00:00
23年会员
UID 881
性别 男
来自 江苏
状态 离线
2楼这次错误, 不能查找 REM, 因为 REM我只是暂时用一下,不想给你们造成垃圾文件在硬盘上, 实际操作的时候是其他代码。

3楼解决了最后一行垃圾,但未解决第二行变量没出来的问题。
我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
5 发表于 2008-06-03 23:03 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
呵呵,还真是忘记了这点,等,在想。。。
批处理之家新域名:www.bathome.net
6 发表于 2008-06-03 23:07 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
Originally posted by quya at 2008-6-3 22:48:
2楼这次错误, 不能查找 REM, 因为 REM我只是暂时用一下,不想给你们造成垃圾文件在硬盘上, 实际操作的时候是其他代码。

3楼解决了最后一行垃圾,但未解决第二行变量没出来的问题。

这次应该是没问题了:

@echo off
rem hhgjg>quya.txt
rem sssss>>%systemroot%\x.txt
rem dddd>>d:\test\y
for /f "tokens=2 delims=>" %%i in ('findstr /v "%%i" %0') do call,echo %%i
pause


[ Last edited by zw19750516 on 2008-6-3 at 11:17 PM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
quya +2 2008-06-03 23:25
批处理之家新域名:www.bathome.net
7 发表于 2008-06-03 23:24 ·  中国 江苏 苏州 电信
高级用户
★★
五星老土
积分 558
发帖 172
注册 2003-02-09 00:00
23年会员
UID 881
性别 男
来自 江苏
状态 离线
呀, 真是奇妙!

如果能再修改一下去除垃圾的句子, 比如判断句子有很多空格(不太可能是文件名), 就更妙了。否则用一个“in”来排除,就可能误排除其他的。

do call, echo没想到,虽然能猜到一些,但希望能详细解释一下,谢谢!

睡觉了, 明天再会。

[ Last edited by quya on 2008-6-3 at 11:26 PM ]
我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
8 发表于 2008-06-03 23:28 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
Originally posted by zw19750516 at 2008-6-3 11:07 PM:

这次应该是没问题了:

@echo off
rem hhgjg>quya.txt
rem sssss>>%systemroot%\x.txt
rem dddd>>d:\test\y
for /f "tokens=2 delims=>" %%i in ('findstr ...



这个集合中的%%i 只是一个普通字符串吗?~
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
9 发表于 2008-06-03 23:48 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
Originally posted by quya at 2008-6-3 11:24 PM:
呀, 真是奇妙!

如果能再修改一下去除垃圾的句子, 比如判断句子有很多空格(不太可能是文件名), 就更妙了。否则用一个“in”来排除,就可 ...


可以把for理解为一个特殊的命令行解释器,for命令在初始化的时候,已将引用变量全部扩展,也就是说%%i被替换为rem sssss>>%systemroot%\x.txt

call可以理解为for开辟的一个子进程,在这个子进程里面,系统环境变量%systemroot%再次被替换成真实的值。
10 发表于 2008-06-04 00:28 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
Originally posted by quya at 2008-6-3 23:24:
呀, 真是奇妙!

如果能再修改一下去除垃圾的句子, 比如判断句子有很多空格(不太可能是文件名), 就更妙了。否则用一个“in”来排除,就可 ...

我也要睡觉了,这样总能判断出来而不误排除其它的吧。

@echo off
rem hhgjg>quya.txt
rem sssss>>%systemroot%\x.txt
rem dddd>>d:\test\y
for /f "tokens=2 delims=>" %%i in ('findstr /v "delims=>" %0') do call,echo %%i
pause
批处理之家新域名:www.bathome.net
11 发表于 2008-06-04 01:23 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
:

其实最准确的办法是把要用for循环的内容放在文件的最后,再用for的skip来读取,就万无一失了。
致精致简!
12 发表于 2008-06-04 01:34 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
最后? 不是应该最前吗?
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
13 发表于 2008-06-04 07:33 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
这样就绝不会有误排除了。

@echo off
for /f "tokens=2 delims=>" %%i in ('more +3 "%~0"') do call,echo %%i
pause&exit
rem hhgjg>quya.txt
rem sssss>>%systemroot%\x.txt
rem dddd>>d:\test\y
致精致简!
14 发表于 2008-06-04 23:33 ·  中国 天津 联通
初级用户
积分 26
发帖 13
注册 2008-06-03 22:52
18年会员
UID 120488
性别 男
状态 离线
看晕了……
15 发表于 2008-06-04 23:46 ·  中国 江苏 苏州 常熟市 电信
高级用户
★★
五星老土
积分 558
发帖 172
注册 2003-02-09 00:00
23年会员
UID 881
性别 男
来自 江苏
状态 离线
首先,请教大家一个问题,CALL 后边的“,”是什么意思? 有特别的意思吗?

其次,各位可能理解错我这个程序的本意了,这段小代码是被加密的批处理的一段, 干扰别人用 >>filename 来分析被加密的变量,当然 “for /f "tokens=2 delims=>" %%i in ('findstr /v "%%i" %0') do call,echo %%i” 这句语句本身也是考虑在被加密之列。

"ECHO %%i" 最后将被 "del %%i" 替换

所以,最重要的倒不是排除FOR语句本身,而是排除可能会生成 “del *.*” 之类的会引起无法意料的大错误,虽然这不太可能, 但能考虑到是最好的, 以防万一。这次 26933062的编程思路脱离了我的想法,当然是我没说清楚,我不好。

如果不删除别人分析的文件, 而代之于写入错误的信息, 当然最好, 但这样的编程过于复杂庞大, 可行性不大。我要做的就是用较简单的语句来造成良好的效果。

虽然批处理加密很难, 但如果同时用多种手段, 还是有所作为的。

[ Last edited by quya on 2008-6-4 at 11:48 PM ]
我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
论坛跳转: