中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]取后一个分区盘符的问题
作者:
标题: [求助]取后一个分区盘符的问题 上一主题 | 下一主题
gmy
版主

操作系统爱好者


积分 1113
发帖 392
注册 2002-11-11
状态 离线
『楼 主』:  [求助]取后一个分区盘符的问题

一个程序产生的关于盘符的报告a.txt
0:1  C: YYYY...
0:2  D: YYYY...
0:3  E: YYYY...
0:4  F: YYYY...
空行
空行

此文件的特点是,行数不确定,根据分区的具体情况而定,如5个分区,则是:
0:1  C: YYYY...
0:2  D: YYYY...
0:3  E: YYYY...
0:4  F: YYYY...
0:5  G: YYYY...
空行
空行

仅想得到红色的部分。即:倒数第3行的第6列字符(注意:倒数第3行和第6列这个位置是固定不变的,YYYY...的内容和字符数量都不确定),结果请赋予变量%drv%。

要求:
1、最好用FOR命令和NT自带命令,尽量不要用第三方工具
2、命令行控制在一行,尽量不要多行。
3、就题论题,不要跑题。

[ Last edited by gmy on 2008-1-24 at 12:16 PM ]



DOS之家 http://doshome.com 站长 葛明阳
2008-1-24 11:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yovie
初级用户




积分 92
发帖 42
注册 2007-8-14
来自 重庆市巫山县
状态 离线
『第 2 楼』:  

@for /f "tokens=2 delims=: " %i in (a.txt) do @set drv=%i



拾人牙慧者!
2008-1-24 11:25
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (109232975)  编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 3 楼』:  

葛站长用什么minitow还是DSPTW



第一高手    第二高手

2008-1-24 11:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gmy
版主

操作系统爱好者


积分 1113
发帖 392
注册 2002-11-11
状态 离线
『第 4 楼』:  

2楼的 tokens=2 我改成 3 就成功了,谢谢!

@for /f "tokens=3 delims=: " %i in (a.txt) do @set drv=%i

如果带: ,如 F: 或 G: 就用以下

@for /f "tokens=2" %i in (a.txt) do @set drv=%i

[ Last edited by gmy on 2008-1-24 at 12:57 PM ]



DOS之家 http://doshome.com 站长 葛明阳
2008-1-24 12:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
gmy
版主

操作系统爱好者


积分 1113
发帖 392
注册 2002-11-11
状态 离线
『第 5 楼』:  

fastslz 真聪明,一眼被你看穿,我用的是dsptw。

[ Last edited by gmy on 2008-1-24 at 12:02 PM ]



DOS之家 http://doshome.com 站长 葛明阳
2008-1-24 12:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 6 楼』:  

有个方法更好,不一定指定到最后一个分区,若有FAT32就放在FAT32上面



第一高手    第二高手

2008-1-24 12:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yovie
初级用户




积分 92
发帖 42
注册 2007-8-14
来自 重庆市巫山县
状态 离线
『第 7 楼』:  

不好意思,看丢了前面的数字



拾人牙慧者!
2008-1-24 12:10
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (109232975)  编辑帖子  回复  引用回复
gmy
版主

操作系统爱好者


积分 1113
发帖 392
注册 2002-11-11
状态 离线
『第 8 楼』:  

6楼,我觉得,很少有人将最后分区设置成NTFS,而倒数第二个分区为FAT,注:这里不能考虑隐藏分区的情况。
一般人全部都是NTFS或FAT,或者最后一个是FAT。



DOS之家 http://doshome.com 站长 葛明阳
2008-1-24 12:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 9 楼』:  

我自己现在用的代码是这样的先遍历出所有FAT,再分析各FAT的可用空间,取一个可用空间最大的。如果没有FAT遍历ntfs可用空间最大的。
fat的话纯DOS下没问题
ntfs的话生成一个带盘号和分区号的文本在*.gho目录里,纯DOS下调用



第一高手    第二高手

2008-1-24 12:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 10 楼』:  

建议LZ多换几种情况测试一下.

2008-1-24 12:25
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 11 楼』:  

现在深度小兵那个是用autoit脚本做的,我不喜欢那东西,下载试了一下那家伙还占用grldr并且卸载时居然不管青红皂白把C:\boot文件夹全删除了,整一个垃圾作品。我在那贴上就对他提了意见,还被他们的粉丝团...(也可能是他自己的马甲)



第一高手    第二高手

2008-1-24 12:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 12 楼』:  

sort /r a.txt>b.txt&&set /p a=<b.txt&&call set a=%%a:~5,1%%

2008-1-24 13:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复
gmy
版主

操作系统爱好者


积分 1113
发帖 392
注册 2002-11-11
状态 离线
『第 13 楼』:  

还有一个问题:

@for /f "tokens=3 delims=: " %i in (a.txt) do @set drv=%i
echo %drv%>>2.txt

如何将以上两行合并成一行?我用过&&:

@for /f "tokens=3 delims=: " %i in (a.txt) do @set drv=%i  && echo %drv%>>2.txt

以上方法不行,会产生多个F或G,我只要一个。

[ Last edited by gmy on 2008-1-24 at 05:48 PM ]



DOS之家 http://doshome.com 站长 葛明阳
2008-1-24 17:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 14 楼』:  

直接这样行不
@echo off
for /f "skip=2 tokens=1,2" %%i in ('dsptw 0 /find:all /y') do set p2p=%%i&set drv=%%j
set drv
set p2p
pause



第一高手    第二高手

2008-1-24 18:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 15 楼』:  

命令行
@for /f "tokens=3 delims=: " %i in (01.txt) do echo %i>2.txt

P:
@for /f "tokens=2" %%i in ('dsptw 0 /Find:all /Y') do echo %%i>2.txt

[ Last edited by terse on 2008-1-24 at 08:54 PM ]



简单!简单!再简单!
2008-1-24 20:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: