中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎么读取每一行第一个字母,并执行此命令.
« [1] [2] »
作者:
标题: 怎么读取每一行第一个字母,并执行此命令. 上一主题 | 下一主题
online365
初级用户




积分 182
发帖 75
注册 2006-10-11
状态 离线
『楼 主』:  怎么读取每一行第一个字母,并执行此命令.

1.txt 的内容如下:  (一行一个字母)

c
h
k
d
s
k


我想把他们组合在一起执行 chkdsk 命令~~ 不知道怎么写啊`

[ Last edited by namejm on 2006-11-6 at 09:08 PM ]

2006-11-6 17:54
查看资料  发送邮件  发短消息 网志  OICQ (123000365)  编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 2 楼』:  

本来想和楼主一起交流上面提出的问题(很有意思),可是想了半天不知道该如何回答:)
我现在都不知道应该认为是纯DOS探讨还是大家都用的XP系统的CMD Shell……


当我在论坛检索内查找了楼主发的大部分贴子,才确定这个问题是问非纯DOS的问题,哈哈……
  errorlevel 返回值的问题~`
  %random% 的问题 DOS批处理
  sc 命令的用法 DOS批处理
  ><nul 是什么意思啊??
  一个疑问? 顺便拜师~```
  谁能给我具体的讲讲 for /f 这个命令吗?
  请高手帮我编一个批量修改文件名的批处理...
  ……
看到楼主提过的问题中有<>和for /f读文件等问题,
那这上面的好玩的问题是不是应该是有趣的解决方法?

好玩的解决方法如下,它是自己“写”自己的方式读出chkdsk然后直接自动运行。
为了好玩,所以它只能正确运行一次,哈哈……
但楼主想要的那些问题特性和重定向和读文件都用上了:)
还有楼主可能感兴趣的如何不写入无多余的回车符在最后……也用上了:)

下面例子只求好玩,不实用:)
@for /f %%. in (1.txt) do @set /p=%%.<nul>>"%~f0"
@,
最后一行的@,是有原因的,是怕你直接存第一行而不给一个换行符,
所以,@,就是遇到了后面跟着DOS指令也能够正常执行,
但这种好玩的方法只能正常执行一次~:D



上面用到的 "%~f0" 是批处理自己的盘符路径文件名的全称,此信息在 for /? 的帮助信息中可以查找到更多的消息:)

使用  Del  "%~f0" 还可以让批处理 “自杀” ,即自己删掉自己:)

自己(批处理本身)向自己“体内”写入新信息还可以用做简单的运行次数或运行日志等特殊应用:)

上面批处理用到的 >>"%~f0" 是将输出的信息不覆盖目标文件内容的情况下追加到目标文件内容的后面。
而  "%~f0"  为什么要将 %~f0(就是批处理自身的全部路径等信息)加上双引号?是因为如果你含有空格的地方运行(如桌面),
那么为了不引起系统错误的判断中间的空格……
例如: CD  ABC   123是进不去 "ABC 123"这个目录的,要加双引号系统才知道这是一体的,
所以上面批处理自身信息的表示要用双引号括起来:)


set /p=%%.<nul 是为了去掉你那1.txt中全带了回车换行符的“c h k d s k”,
至于为什么它能够“去掉”回车和换行符号,这里面有一个典故,嘻嘻……

需要象看故事一样欣赏下面的精彩文章:
----------------------------------------------------------------------------------------------------
[原创]无奈何签名代码略析
http://www.cn-dos.net/forum/viewthread.php?tid=18838&fpage=1&highlight=%E7%AD%BE%E5%90%8D
----------------------------------------------------------------------------------------------------
上面的文章看完了,楼主就可以做更好玩的东东了~:)
(如果没有看过这篇文章的朋友,请放下手中的任何事情,现在就去看《无奈何签名代码略析》)
(最没用的就是收藏,最有用的就是用立刻去看去学去做一遍来代替没有用的点收藏的动作:)

[ Last edited by redtek on 2006-11-6 at 10:38 PM ]



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-11-6 22:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 3 楼』:  

果然好玩。 ^_^

2006-11-6 22:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 4 楼』:  

厉害!有意思!

2006-11-6 23:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 5 楼』:  

  原理redtek已经帖出来了,我就不再多说,来段代码,执行N次都能得到正确的结果:
@echo off
setlocal enabledelayedexpansion
for /f %%i in (1.txt) do set var=!var!%%i
echo %var%
pause


   此帖被 +2 点积分     点击查看详情   
评分人:【 redtek 分数: +2  时间:2006-11-7 22:53




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-11-7 01:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 6 楼』:  


  强啊~~蛮有意思的~~


2006-11-7 01:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
online365
初级用户




积分 182
发帖 75
注册 2006-10-11
状态 离线
『第 7 楼』:  

非常感谢 redtek 和 namejm 两个大侠`` 问题已经成功的解决了,但是代码有点不懂哦. 小弟继续学习ing ...

2006-11-7 08:11
查看资料  发送邮件  发短消息 网志  OICQ (123000365)  编辑帖子  回复  引用回复
zerostudy
中级用户





积分 266
发帖 98
注册 2006-4-21
状态 离线
『第 8 楼』:  

set var=!var!%%i
设一个变量var 给他的值是!var!(这个就是他本身.)%%i就是从文本里读到的.
!var!开始是空值.所以用for循环第一次时.是var=c .然后又循环..这时.var=C加上h了.就是var=ch..
到最后就成了chkdsk...

   此帖被 +2 点积分     点击查看详情   
评分人:【 redtek 分数: +2  时间:2006-11-7 09:30




纵是千年万年 亦难以忘记
2006-11-7 08:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 9 楼』:  

不知道第一个字母有没有特殊字符

2006-11-7 08:58
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
online365
初级用户




积分 182
发帖 75
注册 2006-10-11
状态 离线
『第 10 楼』:  

谢谢8楼的解释...
小弟又出有一个疑问了..
如果文本里面的内容并不像上面的那么简单,但我又想指定的提取里面的内容显示出来呢
还是像上例一样提取 chkdsk 到一行(前面两行和最后一行是顾意多写的)

yyyyy
bbbb
abca
ghdk
jkl
cde
sss
kkmm
hhhhyy

不知道有没有办法啊??

2006-11-8 09:49
查看资料  发送邮件  发短消息 网志  OICQ (123000365)  编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 11 楼』:  

  请问你的文本内容有什么规律?要提取的内容又有什么规律?你10F的举例,完全让人无所适从。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-11-8 11:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 12 楼』:  


Re namejm:
  其实他还是想提取出chkdsk,只是前面两行和最后一行是故意干扰你的,呵呵``


2006-11-8 12:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
online365
初级用户




积分 182
发帖 75
注册 2006-10-11
状态 离线
『第 13 楼』:  

lxmxn 说对了,就是想在10F的例子里面提取 chkdsk 出来.. (前面两行和最后一行是顾意多写的)

2006-11-8 13:26
查看资料  发送邮件  发短消息 网志  OICQ (123000365)  编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 14 楼』:  


  但是告诉你,这样做是丝毫没有意义的。因为要提取的字母所在的行中的字母没有任何规律可言。如果你要试试"加密"的效果,你可以把一个命令中的每个字符都置于每一个行的同一个位置,比如下面的的行可以作为提取 "ping" 命令的文本。

-----------------------------------
abcpdafd
wdeiaedlafjklsjfeil
efanfeildjf
sajglielajgfia
-----------------------------------
  提取每行的第四个字符即可。


2006-11-8 13:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 15 楼』:  

还不如直接 chkdsk

或者就一行:abcdefghijklmnopqrstuvwxyz
再 %N:~n,1% 提取

2006-11-8 13:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: