中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-01 05:53
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 在DOS下,如何确定硬盘的最后一个分区的盘符;如何判定目 查看 1,914 回复 11
楼 主 在DOS下,如何确定硬盘的最后一个分区的盘符;如何判定目 发表于 2006-03-05 23:50 ·  中国 广东 珠海 香洲区 电信
新手上路
积分 6
发帖 1
注册 2006-03-05 23:49
20年会员
UID 51432
状态 离线
在只有一个光驱的情况下,用FINDCD可以确定光驱的驱动器号,如何根据这个驱动器号来确定硬盘最后一个分区的盘符(不含NTFS分区)。想建目录名时,以及如何判定目录名是否存在?请高手作答。
2 帮顶 发表于 2006-03-11 11:00 ·  中国 福建 泉州 电信
初级用户
积分 86
发帖 32
注册 2006-01-27 15:56
20年会员
UID 49579
状态 离线
我也想知道答案
3 发表于 2006-03-11 12:58 ·  中国 江苏 南京 电信
银牌会员
★★★
积分 1,513
发帖 554
注册 2005-12-30 00:50
20年会员
UID 48180
性别 男
状态 离线
我也想知道
4 发表于 2006-03-11 16:28 ·  中国 福建 泉州 石狮市 电信
银牌会员
★★★
积分 1,276
发帖 469
注册 2002-12-23 13:00
23年会员
UID 586
性别 男
来自 福建泉州
状态 离线
5 发表于 2006-03-11 23:08 ·  中国 广东 江门 台山市 电信
初级用户
积分 22
发帖 9
注册 2006-03-01 20:52
20年会员
UID 51189
状态 离线
『第 5 楼』:

OK,刚才给FINDCD增加了一个选项/L,用于显示和设置第一个光驱前的盘符给%CDROM%,试试看吧:
打开附件
例如,假设光驱为D:
FINDCD /L
CDROM=C:

附件下载不了
6 发表于 2006-03-12 01:21 ·  中国 北京 大兴区 联通
初级用户
★★
积分 185
发帖 82
注册 2005-08-12 13:41
20年会员
UID 41586
性别 男
状态 离线
使用下面方法

func -a6>list.txt // 将所有分区盘符写入list.txt(不包括光驱)
STRINGS a=LINESIZE list.txt //返回文件内容的总行数
STRINGS p=READ list.txt,%a% //读取文件中指定行数的内容
echo %p% //%p%就是最后分区的盘符
7 发表于 2006-03-12 12:31 ·  中国 福建 泉州 电信
银牌会员
★★★
积分 1,276
发帖 469
注册 2002-12-23 13:00
23年会员
UID 586
性别 男
来自 福建泉州
状态 离线
还有一个方法,可以试试
使用MD
if exist在判断最后一个分区的盘符.
可以试试以下方法.

@echo off
set drv=c d e f g h i j k l m n o p q r s t u v w x y z
if "%1"=="" if "%last_drv%"=="" call %0 %drv%
:set_last
if "%1"=="" goto end
md %1:\last.drv>nul
if not exist %1:\last.drv\nul goto end
rd %1:\last.drv>nul
set last_drv=%1:
shift
goto set_last

:end
QQ:366840202
http://chenall.net
8 发表于 2006-03-12 21:09 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
看起来都挺牛b的,咱也来一个:
@echo off
cd\
set c=C:
set d=D:
set e=E:
set f=F:
set g=G:
set h=H:
set i=I:
set j=J:
set k=K:
set l=L:
set m=M:
set n=N:
set o=O:
set p=P:
set q=Q:
set r=R:
set s=S:
set t=T:
set u=U:
set v=V:
set w=W:
set x=X:
set y=Y:
set z=Z:

%c%
%d%
%E%
%f%
%g%
%h%
%i%
%j%
%k%
%l%
%m%
%n%
%o%
%p%
%q%
%r%
%s%
%t%
%u%
%v%
%w%
%x%
%y%
%z%

if "%cd%" == "%d%\" %c%
if "%cd%" == "%e%\" %d%
if "%cd%" == "%f%\" %e%
if "%cd%" == "%g%\" %f%
if "%cd%" == "%h%\" %g%
if "%cd%" == "%i%\" %h%
if "%cd%" == "%j%\" %i%
if "%cd%" == "%k%\" %j%
if "%cd%" == "%l%\" %k%
if "%cd%" == "%m%\" %l%
if "%cd%" == "%n%\" %m%
if "%cd%" == "%o%\" %n%
if "%cd%" == "%p%\" %o%
if "%cd%" == "%q%\" %p%
if "%cd%" == "%r%\" %q%
if "%cd%" == "%s%\" %r%
if "%cd%" == "%t%\" %s%
if "%cd%" == "%u%\" %t%
if "%cd%" == "%v%\" %u%
if "%cd%" == "%w%\" %v%
if "%cd%" == "%x%\" %w%
if "%cd%" == "%y%\" %x%
if "%cd%" == "%z%\" %y%

在命令行中测试通过,假设光驱内有盘,且可以在命令行中访问。
之所以写这么长是为了方便在DOS下执行,不知道DOS下有没有%cd%这个环境变量,无聊的朋友帮忙在DOS下测试下看看,注意语句中的大小写。

[ Last edited by 3742668 on 2006-3-12 at 22:49 ]
9 发表于 2006-03-13 00:31 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
如果系统启动时设置了内存虚拟盘,那么以上所有的程序都会失效。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
10 发表于 2006-03-13 13:46 ·  中国 福建 泉州 电信
初级用户
积分 86
发帖 32
注册 2006-01-27 15:56
20年会员
UID 49579
状态 离线
Originally posted by Climbing at 2006-3-13 00:31:
如果系统启动时设置了内存虚拟盘,那么以上所有的程序都会失效。


那岂不是一切又都白做了,空欢喜一场!
11 发表于 2006-03-13 20:09 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
哈哈,楼上这两位真是搞笑。
如果你能提供一个完美的方案出来我才会觉得你牛b
要不就一边呆着去。
12 发表于 2006-03-14 02:01 ·  中国 北京 大兴区 联通
初级用户
★★
积分 185
发帖 82
注册 2005-08-12 13:41
20年会员
UID 41586
性别 男
状态 离线
Originally posted by Climbing at 2006-3-13 00:31:
如果系统启动时设置了内存虚拟盘,那么以上所有的程序都会失效。


设置了虚拟内存盘也没关系,因为strings返回文件总行数总是比实际行数少一行,而用 "strings read file,返回的总行数" 得到的是倒数第二行的内容,正好是这个问题想要的答案。至于为什么用它返回的总行数读的不是最后一行我也没搞清呵呵。
func -a6 输出格式:

C
D
E
.
.
.
X :: X为虚拟内存盘符
论坛跳转: