|
quya
高级用户
五星老土
积分 558
发帖 172
注册 2003-2-9 来自 江苏
状态 离线
|
『楼 主』:
[已解决]再次求解判断盘符问题
原来 for /f "skip=2 tokens=1 delims=:" %%a in ('%var1%^|more') do (
%var2% %%a: | find/i /v "cd-rom">>alldrivers.txt 后面少了个括号
根据帖子 http://www.cn-dos.net/forum/viewthread.php?tid=40750&fpage=4
我重新拟了个思路:
我想在所有盘符上寻找一个特定文件, 而且以光盘为优先, 为了避免可恶的错误信息, 我根据这儿网友的思路写了以下代码.
@echo on&setlocal EnableDelayedExpansion
set "var1=fsutil fsinfo drives"
set "var2=fsutil fsinfo drivetype"
for /f "skip=2 tokens=1 delims=:" %%a in ('%var1%^|more') do (
%var2% %%a: | find/i "cd-rom">>alldrivers.txt)
for /f "skip=2 tokens=1 delims=:" %%a in ('%var1%^|more') do (
%var2% %%a: | find/i /v "cd-rom">>alldrivers.txt
for /f "tokens=1 delims=:" %%a in (alldrivers.txt) do (
set "str=%%a"
dir !str!: >nul 2>nul
if !ERRORLEVEL! equ 0 (echo !str!>>readydrivers.txt))
echo.&pause&exit 结果并没有生成 readydrivers.txt 文件
于是我把它再简单化如下
@echo off&setlocal EnableDelayedExpansion
set "var1=fsutil fsinfo drives"
set "var2=fsutil fsinfo drivetype"
for /f "skip=2 tokens=1 delims=:" %%a in ('%var1%^|more') do (
%var2% %%a: | find/i "cd-rom">>drivers.txt)
for /f "skip=2 tokens=1 delims=:" %%a in ('%var1%^|more') do (
%var2% %%a: | find/i /v "cd-rom">>drivers.txt
for /f "tokens=1 delims=:" %%a in (drivers.txt) do (echo %%a)
echo.&pause&exit for /f "tokens=1 delims=:" %%a in (drivers.txt) do (echo %%a) 还是没执行!!
我于是直接在命令符下执行
for /f "tokens=1 delims=:" %a in (drivers.txt) do (echo %a) 结果准确无误. 这是怎么回事??
另, 可否代码再简洁点, 比如不生成临时文件之类的.
再另, "fsutil" 只能在 XP PRO环境由管理员身份执行, 如果想避免这种情况. "fsutil fsinfo drives" 可用外部程序 FINDCD (3.11k)代替, "fsutil fsinfo drivetype" 用DRVTYPES (9.09k) 代替, 只需少量修改下.
[ Last edited by quya on 2008-6-2 at 12:56 PM ]
|
我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已. |
|
2008-6-2 11:52 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
2 楼』:
不用fsutil 判断光驱盘符的方法始终没有想出来。
@echo off&setlocal EnableDelayedExpansion
set "var1=fsutil fsinfo drives"
set "var2=fsutil fsinfo drivetype"
for /f "skip=2 tokens=1 delims=:" %%a in ('%var1%^|more') do (
%var2% %%a: | find/i "cd-rom" >nul&&set g=!g! %%a||set "y=!y! %%a"
)
for %%a in (%g% %y%) do (
dir %%a: >nul 2>nul
if !ERRORLEVEL! equ 0 (>>readydrivers.txt echo %%a)
)
start "" "readydrivers.txt"
|
致精致简! |
|
2008-6-2 15:21 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
3 楼』:
我在我电脑上执行 if not exist g:\ echo succeed 结果成功执行
我的确有G盘,的确是光驱 我想是不是不放入光盘时是不是就“不存在光驱”
用这种方法,不用fsutil也可以了啊~
for %%a in (c d e f g h i j k ... n) do if not exist %%a:\ echo %%a为光驱&goto next
:next
pause
[ Last edited by pusofalse on 2008-6-2 at 03:32 PM ]
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-6-2 15:29 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
4 楼』:
问题是他有2 个光驱,一个有盘,一个无盘。
要怎么知道他们的盘符?不用fsutil
|
致精致简! |
|
2008-6-2 15:33 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
5 楼』:
跟踪注册表的硬件信息~ 找到关于光驱的项 我想有盘或无盘 键值肯定是不一样的~
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-6-2 15:50 |
|
|
quya
高级用户
五星老土
积分 558
发帖 172
注册 2003-2-9 来自 江苏
状态 离线
|
『第
6 楼』:
26933062 的代码真的是致精致简, 看不太懂但确实执行了正确结果.
但有一个小小的缺陷, 就是忽略了 C 盘.
用我那种办法, 可以用条 ECHO 语句 插入 C 盘 在 光盘之后, 但用你那种办法, 我只能将 C盘 插在第一个或者最后一个, 如何插在中间? 如果增加代码似乎又不合算.
另外我这段程序是在安装系统时调用的, 我想到了有些盘可能没来得及格式化, 会出现 "invalid media", 或者软盘没有插入, 会出现 "Abort? Retry?..." 之类的信息, 不知道
dir %%a: >nul 2>nul
能否屏蔽所有上述信息? 我感觉可能有问题, 我今天回去会测试. 如果无法屏蔽错误信息, 有没有更好的办法?
|
我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已. |
|
2008-6-2 16:30 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
7 楼』:
要 c 盘
@echo off&setlocal EnableDelayedExpansion
set "var1=fsutil fsinfo drives"
set "var2=fsutil fsinfo drivetype"
for /f "tokens=1* delims=:\ " %%a in ('%var1%^|more') do (
if "%%b"=="" (set str=%%a) else set str=%%b
set "str=!str:~0,1!"
%var2% !str!: | find/i "cd-rom" >nul&&set g=!g! !str!||set "y=!y! !str!"
)
for %%a in (%g% %y%) do (
dir %%a: >nul 2>nul
if !ERRORLEVEL! equ 0 (echo %%a)
)
pause
此帖被 +2 点积分 点击查看详情 评分人:【 quya 】 | 分数: +2 | 时间:2008-6-2 16:50 |
|
|
致精致简! |
|
2008-6-2 16:37 |
|
|
quya
高级用户
五星老土
积分 558
发帖 172
注册 2003-2-9 来自 江苏
状态 离线
|
『第
8 楼』:
简矣、妙矣、无以复加矣!
我对楼上的敬佩,有如黄河之水连绵不绝,黄河决堤一发不可收拾。
决定倾我所囊, 贡献我有限的积分. 怎么不能给积分?(说不能给自己) 而且最多给2 ?
[ Last edited by quya on 2008-6-2 at 04:49 PM ]
|
我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已. |
|
2008-6-2 16:47 |
|
|
quya
高级用户
五星老土
积分 558
发帖 172
注册 2003-2-9 来自 江苏
状态 离线
|
『第
9 楼』:
Quote: | Originally posted by quya at 2008-6-2 04:30 PM:
......另外我这段程序是在安装系统时调用的, 我想到了有些盘可能没来得及格式化, 会出现 "invalid media", 或者软盘没有插入, 会出现 "Abort? Retry?..." 之类的信息, 不知道
dir %%a: >nul 2>nul
能否屏蔽所有上述信息? 我感觉可能有问题, 我今天回去会测试. 如果无法屏蔽错误信息, 有没有更好的办法? . |
|
报告一下, 在XP DOS 环境下并没有出现我担心的纯DOS下出现的问题。
DIR 一个未格式化的盘或者无盘的软驱,出现错误信息, 但无弹出窗口错误信息。可以 2>nul 屏蔽
if exist ldirver]\nul command, 未格式化盘操作成功,无错误码,无盘软驱则有弹出窗口, 而且无法屏蔽,和无盘光驱类似。 再次证明if exist 寻找特定盘符的不科学性。
一个好的程序,容错是最重要的, 至于代码的巧妙,那是高人的专利,我等菜鸟无法望其项背, 只好偷偷学几招, 以为窃喜。
|
我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已. |
|
2008-6-2 21:00 |
|