2014-10-29 133 views
0

我試圖使用下面的代碼來獲取用戶命名爲「新卷」的驅動器的名稱,以便自動化我們公司的一些測試用例。批處理文件找不到文本文件

wmic logicaldisk get caption,volumeName > c:\batch_script.txt 
for /f "tokens=*" %%A in (c:\batch_script.txt) do echo %%A 
PAUSE 

現在我已經得到了一些與此文件不同的運行時問題;我運行該文件的前2/3時間,我得知系統找不到文件「c:\ batch_script.txt」,但在第三次嘗試後,我沒有收到系統可以發送的消息再也找不到這個文件了。

我在這裏做錯了什麼?或者wmic命令搞亂了我的文件權限? (因爲我必須以管理員身份運行批處理文件才能使wmic命令運行)

再次感謝所有高級幫助。

回答

0

您是否以管理員權限運行腳本? 如果C:\是Windows驅動器,則需要管理員許可在其中創建文件。

0

我會建議wmic可能會調用一些實際上創建該文件的可執行文件,但wmic本身立即返回。我不能看到它發生在我的系統上,但也許...

因此,也許刪除目標文件(我選擇使文件在%temp%下,以避免安全問題),然後故意等待(或調查是否一些可執行文件會出現使用tasklist,等待終止)

無論如何,wmic輸出是unicode的,所以你需要

for /f ... %%A in ('type "yourfilename"') do ... 

到ascify它。

0

我不確定你爲什麼看到你正在報告的結果。但下面會給你你想要的。

@echo off 
for /f "skip=1 delims=" %%A in (
    'wmic logicaldisk where "volumeName='System Reserved'" get caption' 
) do for /f "delims=" %%B in ("%%A") do echo %%B 

額外FOR/F迴路用於修剪一個額外的,不需要回車即在WMIC輸出的每一行的末尾時,它是由FOR/F直接處理。 WMIC輸出是unicode,並且有一個FOR/F異常,它在將WMIC輸出轉換爲ANSI時神奇地附加了額外的回車符。