![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 21:36 |
共 48,041 主题排行 / 350,128 发帖 / 今日 3 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [求助]簡化偵測磁碟是否存在程序 |
| 可打印版本 738 / 11 |
| 第1楼 XZ | 发表于 2008-03-25 00:52 |
| 初级用户 发帖 65 积分 144 来自 Taiwan | |
|
[求助]簡化偵測磁碟是否存在程序 狀態: 存在的磁碟機有 C: E: M:
請問如何能簡化以下批次程序 結果: 我將上面的語法縮減成下面這樣但是 %kkk%都無法帶出數值 最後的結果只會秀出最後一台磁碟機的代號 請協助修正或是支援一下更憂的寫法 謝謝您 結果: [ Last edited by XZ on 2008-3-25 at 12:54 AM ] |
|
| 第2楼 dikex | 发表于 2008-03-25 01:45 |
| 高级用户 发帖 366 积分 788 | |
|
::windows xp professional
fsutil fsinfo drives | more |
|
| 第3楼 terse | 发表于 2008-03-25 02:14 |
| 银牌会员 发帖 946 积分 2,404 | |
|
变量延迟:
set kkk= set zzk=C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z: setlocal enabledelayedexpansion for %%d in (%zzk%) do IF EXIST %%d set kkk=!kkk! %%d echo %kkk% pause 你还有fsutil fsinfo drives....方法 还有 wmic logicaldisk where "drivetype='3'" get caption |
|
| 第4楼 XZ | 发表于 2008-03-25 02:34 |
| 初级用户 发帖 65 积分 144 来自 Taiwan | |
Originally posted by terse at 2008-3-25 02:14 AM: 感謝您 測試結果很OK 兩個小問題 1. 請問為這裡何是使用 "!" 而不是 "%" (這個功能好像要啟動 setlocal enabledelayedexpansion 才會使驚嘆號生效..這個我可以努力找GOOGLE或百度解答) 2.若使用 fsutil fsinfo drives 要如何把輸出的值代進變數中,就是把輸出的值設進 %kkk% Originally posted by dikex at 2008-3-25 01:45 AM: 原來MORE還可以這樣用喔讓她輸出變成斷行..不過第一行的還是連在一起..不知道她是以怎樣作判斷斷行的 ^^" |
|
| 第5楼 terse | 发表于 2008-03-25 03:00 |
| 银牌会员 发帖 946 积分 2,404 | |
|
自己运行一下就知道
@echo off set kkk= set zzk=C: D: E: F: G: H: I: J: K: L: M: N: O: P: Q: R: S: T: U: V: W: X: Y: Z: setlocal enabledelayedexpansion for %%d in (%zzk%) do IF EXIST %%d set kkk=!kkk! %%d echo %kkk% pause for /f "skip=1" %%a in ('wmic logicaldisk where "drivetype='3'" get caption') do set kkk1=!kkk1! %%a echo %kkk1% pause for /f "skip=1 tokens=1,2 delims=\" %%a in ('fsutil fsinfo drives^|find /v ""') do set kkk2=!kkk2! %%a echo %kkk% pause |
|
| 第6楼 313885174 | 发表于 2008-03-25 13:02 |
| 中级用户 发帖 100 积分 206 | |
|
果然很强
|
|
| 第7楼 XZ | 发表于 2008-03-26 00:28 |
| 初级用户 发帖 65 积分 144 来自 Taiwan | |
Originally posted by terse at 2008-3-25 03:00 AM: 感謝 !! 經過測試第1種執行速度最快 接下來是3,最後是2 不過三種都能達到需求 程序疑問 中間的tokens=1,2 不過我改成 1或是 2 或是1,3結果都一樣..請問這裡設成1,2一定有特別的原因吧^^" 我有K了一下 FOR的說明 ^^" |
|
| 第8楼 terse | 发表于 2008-03-26 00:54 |
| 银牌会员 发帖 946 积分 2,404 | |
|
在这里 tokens=1,2 可以省略
|
|
| 第9楼 fastslz | 发表于 2008-03-26 01:45 |
| 铂金会员 发帖 2,315 积分 5,493 来自 上海 | |
|
还有一种NT系列下更通用的方法,其实是VBS代码
http://www.cn-dos.net/forum/viewthread.php?tid=38459 |
|
| 第10楼 XZ | 发表于 2008-03-26 01:53 |
| 初级用户 发帖 65 积分 144 来自 Taiwan | |
|
感謝各位的解答 問題已解決
忽然發現 第三行指令依然無法達到需求 因為回傳的是 %kkk% 所以正常 要是改成 %kkk2%就無法正確顯示單獨磁碟機代號了 ^^" 執行結果如下 [ Last edited by XZ on 2008-3-26 at 02:11 AM ] |
|
| 第11楼 terse | 发表于 2008-03-26 03:33 |
| 银牌会员 发帖 946 积分 2,404 | |
Originally posted by XZ at 2008-3-26 01:53: for /f "skip=1 delims=\" %%i in ('fsutil fsinfo drives^|find /v ""') do ( set kk2=%%i set kk2=!kk2:~-2! set kk1=!kk1! !kk2! ) echo %kk1% |
|
| 第12楼 ansipeter | 发表于 2008-03-26 10:50 |
| 中级用户 发帖 130 积分 269 | |
|
最终结果不就是得到本地的所有磁盘吗,没有必要用什么变量啊,延迟变量啊之类的,可以试试下面的代码:
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |