中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 19:47
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [急]关于如何获得光驱盘符
可打印版本  2,464 / 12
第1楼 okjacky 发表于 2009-08-12 04:05
新手上路 发帖 8 积分 8
[急]关于如何获得光驱盘符
本人想获取电脑的光驱的盘符,写了一段代码如下:



其中截取字符能够在xp下执行,但是在vista和windows7中取到的为空。
刚学批处理,代码肯定写的比较烂,还请大虾指点。谢谢。

ps:其中考虑到可能有多个光驱,所以判断光驱中是否有某个文件来确定是哪个光驱。
第2楼 okjacky 发表于 2009-08-12 04:36
新手上路 发帖 8 积分 8
请高手回复啦,谢谢了。
第3楼 okjacky 发表于 2009-08-12 05:07
新手上路 发帖 8 积分 8
怎么只有人看,没有人给点意见啦?高手出来指定指定啦。
第4楼 newxso 发表于 2009-08-12 05:32
初级用户 发帖 101 积分 73 来自 GZ
没有环境,所以不能回答。楼主可以在批处理中只保留 wmic logicaldisk where "drivetype=5" get DeviceID 此句(当然下面加上暂停命令 pause)看看结果如何。
第5楼 okjacky 发表于 2009-08-12 05:47
新手上路 发帖 8 积分 8
如果正常的一个光驱的话就是:
DeviceID
E:_____

譬如如果光驱盘符是E的话,而且这样用for跳过第一行后。取的盘符后面有一串空格,
如”_“所示。所以才有截取字符一说。现在发现在xp下面这个for执行一次,但是在
vista和Windows7下却会多执行一次,但是值是空白。
然后现在我修改代码如下,因为查到网上说延迟扩展变量。
@echo off
setlocal enabledelayedexpansion

set insDriverName=""

for /f "skip=1 tokens=*" %%j in ('wmic logicaldisk where "drivetype=5" get DeviceID') do (
set tempName=%%j
set tCDROM=!tempName:~0,2!
echo !tCDROM!
if exist "!tCDROM!\tmuninst.ini" (set insDriverName="!tCDROM!\InstallationFiles"))
echo !insDriverName!
xp下没问题,但是vista和Windows7下还是有问题。
第6楼 newxso 发表于 2009-08-12 05:57
初级用户 发帖 101 积分 73 来自 GZ
怎么多了“_____”符号,在XP下没有此符号。

既然知道有 tmuninst.ini 此文件,直接全盘查找此文件不就可以吗?
第7楼 okjacky 发表于 2009-08-12 06:09
新手上路 发帖 8 积分 8
”______“我是用这个表示空格。楼上的好像也可以啦。
但是为什么会出现我那样的问题呢?
第8楼 newxso 发表于 2009-08-12 06:19
初级用户 发帖 101 积分 73 来自 GZ
取消 for 语句中的 tokens=*


[ Last edited by newxso on 2009-8-12 at 06:20 ]
第9楼 okjacky 发表于 2009-08-12 06:29
新手上路 发帖 8 积分 8
谢谢newxso了,看样子我想复杂了。
你这个对于知道文件的,在任意盘都可以咯。不过只是从C-Z都要去if一遍而已。
第10楼 kidzgy 发表于 2009-08-13 09:04
中级用户 发帖 129 积分 262
Originally posted by newxso at 2009-8-12 06:19 AM:
取消 for 语句中的 tokens=*
第11楼 okjacky 发表于 2009-08-17 02:26
新手上路 发帖 8 积分 8
Originally posted by newxso at 2009-8-12 06:19:
取消 for 语句中的 tokens=*
第12楼 ldr2zjj 发表于 2010-02-07 01:44
初级用户 发帖 95 积分 167
Originally posted by newxso at 2009-8-12 06:19 AM:
取消 for 语句中的 tokens=*
第13楼 qwd 发表于 2010-02-08 12:33
初级用户 发帖 56 积分 161
wmic LOGICALDISK get Description,DeviceID|findstr/i "cd"
:方法一
@echo off
for /f "tokens=3,4" %%i in ('echo list volume^|diskpart^|findstr /i "CD-ROM"') do echo %%i:\
pause


:方法二
@echo off
for /f "tokens=1,3" %%i in ('wmic LOGICALDISK get Description^,DeviceID^|findstr/i "cd"') do echo %%j
pause

:方法三
@echo off
for /f "delims=" %%i in ('fsutil fsinfo drives^|find/v " "') do (
fsutil fsinfo drivetype %%i|findstr /i "CD-ROM">nul&&echo.%%i
)
pause

[ Last edited by qwd on 2010-2-8 at 13:12 ]
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023