中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [急]关于如何获得光驱盘符 上一主题 | 下一主题
okjacky
新手上路





积分 8
发帖 8
注册 2009-8-11
状态 离线
『楼 主』:  [急]关于如何获得光驱盘符

本人想获取电脑的光驱的盘符,写了一段代码如下:
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中取到的为空。
刚学批处理,代码肯定写的比较烂,还请大虾指点。谢谢。

ps:其中考虑到可能有多个光驱,所以判断光驱中是否有某个文件来确定是哪个光驱。

2009-8-12 04:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
okjacky
新手上路





积分 8
发帖 8
注册 2009-8-11
状态 离线
『第 2 楼』:  

请高手回复啦,谢谢了。

2009-8-12 04:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
okjacky
新手上路





积分 8
发帖 8
注册 2009-8-11
状态 离线
『第 3 楼』:  

怎么只有人看,没有人给点意见啦?高手出来指定指定啦。

2009-8-12 05:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
newxso
初级用户

l i u s s


积分 73
发帖 101
注册 2008-9-17
来自 GZ
状态 离线
『第 4 楼』:  

没有环境,所以不能回答。楼主可以在批处理中只保留 wmic logicaldisk where "drivetype=5" get DeviceID 此句(当然下面加上暂停命令 pause)看看结果如何。

2009-8-12 05:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
okjacky
新手上路





积分 8
发帖 8
注册 2009-8-11
状态 离线
『第 5 楼』:  

如果正常的一个光驱的话就是:
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下还是有问题。

2009-8-12 05:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
newxso
初级用户

l i u s s


积分 73
发帖 101
注册 2008-9-17
来自 GZ
状态 离线
『第 6 楼』:  

怎么多了“_____”符号,在XP下没有此符号。

既然知道有 tmuninst.ini 此文件,直接全盘查找此文件不就可以吗?
for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  if exist %%a:\tmuninst.ini set driver="%%a:\InstallationFiles"
)
echo %driver%
pause


2009-8-12 05:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
okjacky
新手上路





积分 8
发帖 8
注册 2009-8-11
状态 离线
『第 7 楼』:  

”______“我是用这个表示空格。楼上的好像也可以啦。
但是为什么会出现我那样的问题呢?

2009-8-12 06:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
newxso
初级用户

l i u s s


积分 73
发帖 101
注册 2008-9-17
来自 GZ
状态 离线
『第 8 楼』:  

取消 for 语句中的 tokens=*
@echo off
set Driver=
for /f "skip=1" %%a in ('wmic logicaldisk where "drivetype=5" get DeviceID') do (
   if exist "%%a\tmuninst.ini" (set "Driver=%%a\InstallationFiles")
)
echo %Driver%
pause
[ Last edited by newxso on 2009-8-12 at 06:20 ]

2009-8-12 06:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
okjacky
新手上路





积分 8
发帖 8
注册 2009-8-11
状态 离线
『第 9 楼』:  

谢谢newxso了,看样子我想复杂了。
你这个对于知道文件的,在任意盘都可以咯。不过只是从C-Z都要去if一遍而已。

2009-8-12 06:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kidzgy
中级用户





积分 262
发帖 129
注册 2007-7-11
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by newxso at 2009-8-12 06:19 AM:
取消 for 语句中的 tokens=*
[code]
@echo off
set Driver=
for /f "skip=1" %%a in ('wmic logicaldisk where "drivetype=5" get DeviceID') do (
   if exist "%%a\tmuni ...

运行之后,显示ECHO 处于关闭状态。

2009-8-13 09:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
okjacky
新手上路





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



  Quote:
Originally posted by newxso at 2009-8-12 06:19:
取消 for 语句中的 tokens=*
[code]
@echo off
set Driver=
for /f "skip=1" %%a in ('wmic logicaldisk where "drivetype=5" get DeviceID') do (
   if exist "%%a\tmuni ...

这几天忙去了,不过好像这个在Vista和Windows7下还是不行,的那是那个盘符后面的空格倒是去掉了。谢谢newxso了!我用了你的那个从c检索到z,虽然效率不是很好,但是是个应急的办法。


2009-8-17 02:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ldr2zjj
初级用户





积分 167
发帖 95
注册 2007-5-6
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by newxso at 2009-8-12 06:19 AM:
取消 for 语句中的 tokens=*
[code]
@echo off
set Driver=
for /f "skip=1" %%a in ('wmic logicaldisk where "drivetype=5" get DeviceID') do (
   if exist "%%a\tmuni ...

这方法不行啊~~我也想知道怎么可以获得光驱盘符~~

2010-2-7 01:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qwd
初级用户





积分 161
发帖 56
注册 2007-10-1
状态 离线
『第 13 楼』:  

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 ]

2010-2-8 12:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: