中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]zw19750516 进来一下, 谢了
« [1] [2] »
作者:
标题: [求助]zw19750516 进来一下, 谢了 上一主题 | 下一主题
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『楼 主』:  [求助]zw19750516 进来一下, 谢了

正好又一个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

该怎么做? 谢谢!



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-6-3 22:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 2 楼』:  

我来可以么
@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 ]



致精致简!
2008-6-3 22:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 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 "in" %0') do echo %%i
pause
ps:以后求助请不要直呼其名了,这里高手多的是,我不算什么的。

[ Last edited by zw19750516 on 2008-6-3 at 10:44 PM ]



批处理之家新域名:www.bathome.net
2008-6-3 22:42
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 4 楼』:  

2楼这次错误, 不能查找 REM, 因为 REM我只是暂时用一下,不想给你们造成垃圾文件在硬盘上, 实际操作的时候是其他代码。

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



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-6-3 22:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 5 楼』:  

呵呵,还真是忘记了这点,等,在想。。。



批处理之家新域名:www.bathome.net
2008-6-3 23:03
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 6 楼』:  



  Quote:
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 ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 quya 分数: +2  时间:2008-6-3 23:25




批处理之家新域名:www.bathome.net
2008-6-3 23:07
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 7 楼』:  

呀, 真是奇妙!

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

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

睡觉了, 明天再会。

[ Last edited by quya on 2008-6-3 at 11:26 PM ]



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-6-3 23:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by zw19750516 at 2008-6-3 11:07 PM:

这次应该是没问题了:
[code]
@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...^_^
2008-6-3 23:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by quya at 2008-6-3 11:24 PM:
呀, 真是奇妙!

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

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

call可以理解为for开辟的一个子进程,在这个子进程里面,系统环境变量%systemroot%再次被替换成真实的值。



2008-6-3 23:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 10 楼』:  



  Quote:
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
2008-6-4 00:28
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 11 楼』:  

:
其实最准确的办法是把要用for循环的内容放在文件的最后,再用for的skip来读取,就万无一失了。




致精致简!
2008-6-4 01:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 12 楼』:  

最后? 不是应该最前吗?



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-6-4 01:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 13 楼』:  

这样就绝不会有误排除了。
@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




致精致简!
2008-6-4 07:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
cuihanjie
初级用户





积分 26
发帖 13
注册 2008-6-3
状态 离线
『第 14 楼』:  

看晕了……

2008-6-4 23:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 15 楼』:  

首先,请教大家一个问题,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 ]



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-6-4 23:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: