|
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 |
|
|
quya
高级用户
五星老土
积分 558
发帖 172
注册 2003-2-9 来自 江苏
状态 离线
|
『第
4 楼』:
2楼这次错误, 不能查找 REM, 因为 REM我只是暂时用一下,不想给你们造成垃圾文件在硬盘上, 实际操作的时候是其他代码。
3楼解决了最后一行垃圾,但未解决第二行变量没出来的问题。
|
我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已. |
|
2008-6-3 22:48 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
|
2008-6-3 23:03 |
|
|
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 |
|
|
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 |
|
|
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
状态 离线
|
|
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 |
|