2012-03-01 82 views
2

就像標題所說,我試圖從FIND命令中獲取輸出並將其保存到變量中。具體來說,我使用:將輸出從FIND命令保存到變量

DIR /b /s "C:\" | FIND "someexe.exe" 

找到一個特定的.exe文件,這似乎是做工精細,但後來我想保存FIND的結果,在同一個腳本以後使用。

我已經試過各種不同的調整:

for /f "usebackq" %%i in (`DIR /b /s "C:\" | FIND "someexe.exe"`) do SET foobar=%%i 

但是當我嘗試運行腳本的命令窗口立即關閉(大概是由於一些錯誤,我試圖在未來的放線暫停命令無濟於事)。

我認爲這是一些愚蠢的小事,我做錯了,但如果有人能告訴我它是什麼,我會很感激。只是爲了進一步參考,我不在乎有多少個「someexe.exe」副本存在,我只需要其中一個路徑。

回答

4

您應該會收到此錯誤:| was unexpected at this time.。您的直接問題是未引用的特殊字符,如|必須在出現在FOR/F('命令')時使用^進行轉義。

for /f "usebackq" %%i in (`DIR /b /s "C:\" ^| FIND "someexe.exe"`) do SET foobar=%%i 

聽起來好像您是通過雙擊桌面或Windows資源管理器來運行您的批處理文件。這有效,但在批處理結束後,該窗口立即關閉。在你的情況下,由於語法錯誤,它在到達PAUSE之前終止。

我總是從命令窗口運行我的批處理文件:從開始菜單中選擇您想要的run cmd.exe。這將打開一個命令控制檯。然後將光盤放入批處理文件所在的目錄,然後通過鍵入其名稱(不需要擴展名)來運行批處理文件。現在窗口在腳本終止後保持打開狀態。你可以使用SET來檢查你的變量,然後運行另一個腳本。

你的情況沒有必要使用FIND - DIR可以直接找到文件。此外,文件的路徑可能包含空格,在這種情況下,它將被解析爲令牌。您需要設置「DELIMS =」或「TOKENS = *」,以便獲得完整的路徑。

我不明白爲什麼人們在執行命令時使用USEBACKQ。我只發現它是有用的,如果我試圖使用FOR/F與一個文件,我需要由於空格和/或特殊字符引起的文件引號。

此外,由於無法訪問的目錄,您可能會遇到錯誤。將stderr重定向到nul會清除輸出。這裏再一次,>必須逃脫。

for /f "delims=" %%F in ('dir /b /s "c:\someexe.exe" 2^>nul') do set foobar=%%F 
+0

非常感謝!我不知道你可以用這種方式使用DIR,肯定會清理一些東西。 – mintchkin 2012-03-02 01:24:47

相關問題