标题: [急]关于如何获得光驱盘符
[打印本页]
作者: okjacky
时间: 2009-8-12 04:05
标题: [急]关于如何获得光驱盘符
本人想获取电脑的光驱的盘符,写了一段代码如下:
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:其中考虑到可能有多个光驱,所以判断光驱中是否有某个文件来确定是哪个光驱。
作者: okjacky
时间: 2009-8-12 04:36
请高手回复啦,谢谢了。
作者: okjacky
时间: 2009-8-12 05:07
怎么只有人看,没有人给点意见啦?高手出来指定指定啦。
作者: newxso
时间: 2009-8-12 05:32
没有环境,所以不能回答。楼主可以在批处理中只保留 wmic logicaldisk where "drivetype=5" get DeviceID 此句(当然下面加上暂停命令 pause)看看结果如何。
作者: okjacky
时间: 2009-8-12 05:47
如果正常的一个光驱的话就是:
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下还是有问题。
作者: newxso
时间: 2009-8-12 05:57
怎么多了“_____”符号,在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
作者: okjacky
时间: 2009-8-12 06:09
”______“我是用这个表示空格。楼上的好像也可以啦。
但是为什么会出现我那样的问题呢?
作者: newxso
时间: 2009-8-12 06:19
取消 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 ]
作者: okjacky
时间: 2009-8-12 06:29
谢谢newxso了,看样子我想复杂了。
你这个对于知道文件的,在任意盘都可以咯。不过只是从C-Z都要去if一遍而已。
作者: kidzgy
时间: 2009-8-13 09:04
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 处于关闭状态。
作者: okjacky
时间: 2009-8-17 02:26
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,虽然效率不是很好,但是是个应急的办法。

作者: ldr2zjj
时间: 2010-2-7 01:44
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 ... |
|
这方法不行啊~~我也想知道怎么可以获得光驱盘符~~
作者: qwd
时间: 2010-2-8 12:33
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 ]