我試圖將命令的輸出分配給python --version批處理腳本中的變數,但它不起作用。這是我正在使用的示例代碼
FOR /F "tokens=* USEBACKQ" %%F IN (`python --version`) DO (
SET message=%%F
)
ECHO %message%
雖然它列印了 python 的版本,但它沒有分配給變數var。如果我使用另一個命令而不是python --version正確分配輸出。例如使用dir作品。
可能有什么問題?
筆記 -
@echo off
set message=Hello
FOR /F "tokens=* USEBACKQ" %%F IN (`python --version`) DO (
SET message=%%F
)
ECHO %message%
PAUSE
輸出 -
C:\Users\nik>extra.bat
Python 2.7.9
Hello
Press any key to continue . . .
uj5u.com熱心網友回復:
安裝的 Python 版本明顯輸出版本資訊來處理STDERR(標準錯誤)而不是處理STDOUT(標準輸出)。因此,有必要使用2>&1Microsoft 在有關使用命令重定向運算子的檔案中描述的方法將標準錯誤流和版本資訊重定向到標準輸出流。
要使用的命令列是:
for /F "delims=" %%I in ('python.exe --version 2^>^&1') do set "message=%%I"
當 Windows 命令解釋器在執行命令FOR之前處理此命令列時,重定向運算子>和&必須^在FOR命令列上用脫字符符轉義以解釋為文字字符。
FOR分別cmd.exe使用此命令列處理批處理檔案在后臺啟動另一個命令列程,%ComSpec% /c并將其中指定的命令列'附加為附加引數。因此C:\Windows在后臺安裝 Windows 的情況下執行:
C:\Windows\System32\cmd.exe /c python.exe --version 2>&1
后臺的命令列程現在搜索可執行檔案python.exe,如“X 未被識別為內部或外部命令、可運行程式或批處理檔案”的原因是什么?當python.exe可以通過cmd.exe在后臺運行而沒有可見的控制臺視窗找到該檔案時,它會執行它,并且 Python 將版本資訊輸出到標準錯誤流,該流被重定向到后臺命令列程的標準輸出流。
列印版本資訊cmd.exe后,started 在自己python.exe終止后自行關閉。
該cmd.exe實體處理的批處理檔案,捕捉一切寫入手柄STDOUT啟動的后臺指揮程序和FOR開始捕獲線后處理cmd.exe閉關鎖國。
有被分割默認非空捕獲線到使用正常的空間和水平制表作為字串分隔符串。如果洗掉 0 個或多個前導空格/制表符后的第一個子字串以分號開頭,則忽略捕獲的行,否則將第一個子字串分配給指定的回圈變數I。
這里不需要默認的行處理行為。出于這個原因,該for /F選項delims=定義了一個空的字串分隔符串列,以禁用行拆分行為,從而將整個捕獲的行分配給指定的回圈變數I。eol=;在這種情況下可以保留隱式默認值(分號是行尾),因為 Python 輸出的版本資訊從不以分號開頭。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/312636.html
上一篇:如何除錯混合的cmd和powershell腳本以解決特殊字符問題,例如&符號
下一篇:洗掉MQ佇列的批處理腳本
