2011-04-18 91 views
3

我正在嘗試編寫批處理腳本來查找特定的掛載設備。我在Windows 7批處理腳本查找掛載設備的盤符

我知道該設備將具有文件夾drive:\定製的,所以我想看看所有無限可能性找到一個設備與此路徑

這裏是我到目前爲止

@echo off 
    setLocal Enabledelayedexpansion 


for %%d 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 %%d:\custom (
    ECHO Device Found : %%d 
) 
) 

這不工作,雖然,它認爲它存在於每一個驅動器號..所以我看到「找到設備」爲每一個驅動器號。這是爲什麼?我是否在談論這個錯誤?如何找到在根目錄上具有「自定義」文件夾的驅動器盤符?

感謝,
斯蒂芬妮

回答

1

在路徑的末尾添加\的驅動器號。

for /f "tokens=1,*" %%i in ('fsutil fsinfo drives') do (
    :: work with %%j here 
) 

但是,如果一個驅動器號被賦予一個設備沒有媒體,它可以仍然給出錯誤。無論哪種方式,檢查如:

if not exist O:\ @echo test 

工作完全對我很好(有和沒有not)。該驅動器不存在於我的系統中,因此在刪除not時沒有輸出。

+1

這工作..有點..現在它只落入if statemet如果文件存在,但每次它都會彈出錯誤'驅動器中沒有磁盤。請將磁盤插入驅動器\ device \ harddisk1 \ dr115' – 2011-04-19 17:18:29

+0

@Without Me只是Aweso:有趣...顯然,該消息與可移動磁盤驅動器有關。但是,當我運行修改後的示例腳本時,我在XP中沒有收到任何此類消息。不知道爲什麼。 – 2011-04-19 18:31:57

+0

是啊..我不知道。我試圖改變它的文件路徑尋找我的C:\用戶只是爲了看看它是否是我的外部設備的問題,但我得到了同樣的錯誤。我不知道它抱怨什麼。關於錯誤,如果我點擊「繼續」,它工作正常..煩人的是,有一個彈出每次我運行腳本,雖然 – 2011-04-19 19:11:36

-1

試試這個:

IF EXIST %%d:\custom\ (...) 
+0

我得到以下輸出「設備中找到:C:系統無法找到該設備指定「。那麼它存在並且不會嘗試任何其他字母 – 2011-04-18 21:51:55

+0

在win7 x64中出現同樣的錯誤 – m1m1k 2014-08-09 22:29:01

+0

@ m1m1k:在原始批處理文件中用'nul'替換'custom'時,它適用於Win7 x64。看到這裏:http://imgur.com/vvlyXqV你的代碼看起來如何?你怎麼稱呼它? – 2014-08-11 14:33:11

3

使用fsutil fsinfo drivesfor語句而不是一個靜態列表中:

if exist %%d:\nul (
    echo Device found %%d 
) 
+0

這似乎並沒有做任何事情,當我運行它。你能告訴我'/ f'toekns = 1,*'是什麼嗎? – 2011-04-19 17:32:57

+0

@沒有我它只是aweso:'/ f'與單引號一起執行單引號中的命令並將這些命令標記。 tokens = 1,*「'告訴它在變量'%% i'(第一個標記)和'%% j'(rest)中獲取命令的輸出,並且我嘗試了它,它可以工作。因爲雙'%%'(這是腳本文件中的語法),所以在命令行上工作。刪除一個'%',它也應該在命令行上工作。顯然,你必須對變量做些什麼('%% j'),例如將它們傳遞給你原來的任何東西 – 0xC0000022L 2011-04-20 00:12:26

+1

PS。這個命令需要win7中的Admin Priveleges x64 – m1m1k 2014-08-09 22:28:24

-2

這適用於硬盤和U盤:

@echo off 
for %%? 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 (
     dir %%?:\ > nul 2>nul 
     if exist %%?:\custom echo Device found(s): %%?:\ 
) 

PS:運行WinXP的

+0

在win7 x64下無法工作 – m1m1k 2014-08-09 22:27:58

1

有點複雜,但是這是爲了避免在Win7的阻塞錯誤,唯一的解決辦法:

for /f "tokens=3" %%d in ('echo LIST Volume ^| DISKPART ^| findstr "Healthy Unusable"') do (
    if exist %%d:\custom echo Device found 
) 

我發現的另一種方法是使用vol命令+檢查ERRORLEVEL(if == 1驅動器未安裝):

for /f "tokens=3" %%d in ('echo LIST Volume ^| DISKPART ^| findstr "Healthy Unusable"') do (
    vol %%d: 
    if !ERRORLEVEL!==0 if exist %%d:\custom echo Device found 
) 

注意:在WinXP DISKPART將不會看到可移動驅動器...

+0

在win7 x64上無法工作 - 它必須獲得用戶權限才能運行DISKPART(權限彈出),然後它位於不同的窗口中。 – m1m1k 2014-08-09 22:30:07

+0

這也需要管理員權限 – 2016-11-14 03:07:00

0
@ECHO OFF 
:CICLO 
CLS&ECHO.&ECHO VER ESTADO UNIDADES CON WMIC 
SET "DVF=" 

FOR /F "tokens=1,*" %%A IN ('wmic logicaldisk get caption^, description ^| FIND ":"') DO (

    VOL %%A >nul 2>&1 && (
     CALL SET "DVF=%%DVF%% %%A"& ECHO %%A ^| ON. %%B) || (
     ECHO %%A ^| OFF. %%B 
    ) 
) 
ECHO DEVICEFOUND: %DVF% 
TIMEOUT /T 5 >NUL 
GOTO:CICLO 
+1

歡迎使用堆棧溢出!請考慮包含一些關於您的答案的信息,而不是簡單地發佈代碼。我們嘗試提供的不僅僅是「修復」,而是幫助人們學習。你應該解釋原始代碼中的錯誤,你做了什麼不同,以及爲什麼你的改變起作用。 – 2014-09-16 06:36:13

+0

謝謝安德魯,但是我的英語是......沒什麼。 真的很少有解釋。我們使用「wmic LogicalDisk get caption,description」來提取驅動程序(%% A)或驅動程序和類型(%% B)。 Vol用於推斷驅動程序是否準備就緒,並且其輸出會隨意修改。 '^ |查找「」循環出於格式原因是因爲否則我們得到回車或什麼wmic。但是使用'^ | findstr/i「X」',其中X是本地磁盤,硬盤或CD-ROM等,可以區分您需要的驅動程序的類型。該循環僅用於動態演示其操作。 :)。一聲問候。 – 2014-09-16 07:32:02

+0

你需要在答案中加上解釋*。 – 2014-09-16 07:35:22