2011-06-15 51 views
95

一個變量是否有可能一個批處理文件語句的輸出設置爲變量,例如:如何設置命令的輸出作爲一個批處理文件

findstr testing > %VARIABLE% 

echo %VARIABLE% 
+0

可能重複[批量相當於猛砸反引號(http://stackoverflow.com/questions/2768608/batch-equivalent-of-bash-backticks) – 2014-07-01 16:52:05

+0

其實原來似乎是[如何在Windows中的變量中獲取命令的結果?](http://stackoverflow.com/q/108439/12892)。 – 2014-07-01 16:53:56

+0

[Windows批處理文件:如何使用命令的結果設置變量?](http://stackoverflow.com/questions/889518/windows-batch-files-how-to-set-a-variable - 一個命令的結果) – Nathan 2014-08-13 23:39:47

回答

36

我發現this thread上有Interweb事情。歸結爲:

@echo off 
setlocal enableextensions 
for /f "tokens=*" %%a in ( 
'VER' 
) do ( 
set myvar=%%a 
) 
echo/%%myvar%%=%myvar% 
pause 
endlocal 

您也可以重定向的命令到一個臨時文件的輸出,然後把該臨時文件的內容到你的變量,likesuchashereby:

cmd > tmpFile 
set /p myvar= < tmpFile 
del tmpFile 

增光在Tom的硬件上線程。

+2

真正有用的技巧是使用臨時文件。 – hoang 2012-12-06 12:49:11

+0

底部方法的缺點(在所有其他方面都是可取的),它不適用於多線輸出。 – user1167442 2016-11-29 15:46:13

+0

對於VER我會走另一條路: for/f「tokens = 2 delims = [,]」%% a in('ver')do set version %% a echo%version% – Hardoman 2017-04-06 14:44:50

160
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var=%%F 
) 
ECHO %var% 

我一直使用usebackq所以,如果你有一個字符串插入或長文件名,您可以使用雙引號沒有搞砸了該命令。

現在,如果你的輸出將包含多行,你可以做到這一點

SETLOCAL ENABLEDELAYEDEXPANSION 
SET count=1 
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
    SET var!count!=%%F 
    SET /a count=!count!+1 
) 
ECHO %var1% 
ECHO %var2% 
ECHO %var3% 
ENDLOCAL 
+0

@JesseChisholm Only OP can accept一個答案。根據他的個人資料頁面,這個問題的OP最後在6月15日21:54發生。 – Melebius 2016-10-20 09:52:05

+0

在Win7系統中爲我工作,謝謝! (是的,這是7年的有用性) P.S.不要忘記在命令中展開%到%%! – 2018-01-16 18:09:44

-3

我已經測試過它這樣,它的工作: SET/P瓦爾= | Cmd

通過將命令輸入到變量提示符中,將命令「Cmd」的結果插入到變量「Var」中。

-Update-

它不工作,我的壞,劇本我所做的就是這樣的:

SET /P Var= | dir /b *.txt 
echo %Var% 

它實際上是展示我們說 「的test.txt」,但它實際上是顯示「dir/b * .txt」命令的結果,而不是回顯%var%。我感到困惑,因爲兩個輸出都是一樣的。

+1

這不起作用,你試過了嗎? – mpromonet 2014-08-19 20:43:17

+0

這會輸出命令本身而不是其輸出。 – Khafaga 2016-02-25 16:22:07

+1

如果你打算把命令輸入到變量提示符中,那麼你應該把它寫成'dir/b * .txt | SET/P Var ='讓你的管道方向正確。 PS:它也不這樣工作! – 2016-09-29 14:35:12

9

要讀取文件...

set /P Variable=<File.txt 

寫一個文件

@echo %DataToWrite%>File.txt 

注;在<>字符之前有空格會導致在變量末尾添加一個空格,也是

要添加到文件中,如記錄器程序, 首先製作一個文件,其中包含一個名爲e 。TXT

set /P Data=<log0.log 
set /P Ekey=<e.txt 
@echo %Data%%Ekey%%NewData%>log0.txt 

日誌看起來是這樣

Entry1 
Entry2 

反正一對夫婦有用的東西

-12

希望這有助於

set a=%username% 
echo %a%  
set a="hello" 
echo %a% 
+1

不,這不回答問題。問題是將命令的輸出轉換爲變量 – jeb 2015-09-17 06:00:03

+0

簡單的方法是寫入文件並從該文件讀取文件。 findstr「test」test.txt> testoutput.txt set/p a = Ben2014 2015-09-18 02:42:42

0
cd %windir%\system32\inetsrv 

@echo off 

for /F "tokens=* USEBACKQ" %%x in (  
     `appcmd list apppool /text:name` 
     ) do (
      echo|set /p= "%%x - " /text:name & appcmd.exe list apppool "%%x" /text:processModel.identityType 
     ) 

echo %date% & echo %time% 

pause 
+0

我看不出如何解決這個問題。 'appcmd'不是一個標準的程序,我看不到你把程序輸出分配給一個變量的地方。最後你需要更多的解釋 – jeb 2017-08-04 05:58:12

相關問題