2010-04-28 12 views
2
set A=2 && echo %A% 

這不會在窗口中將A回顯爲2。有什麼辦法可以做到嗎?是否可以設置環境變量並在單行批處理腳本中回顯它?

A=2 ; echo $A 

在bash中工作。我想在Windows類似的行爲

+0

你爲什麼要這樣做?對我來說,這看起來像是一個小小的風格問題。 – 2010-04-28 18:43:26

+0

可能有必要在別名?或者在生成其他腳本的腳本中編寫更簡單的代碼。 – 2010-04-28 18:55:24

回答

1

我敢肯定有很多方法可以做到這一點,這裏有兩個:

  • setlocal ENABLEDELAYEDEXPANSION&set "foo=bar baz"&echo.!foo!&endlocal
  • set "foo=bar baz"&for /F "tokens=1,* delims==" %%A in ('set foo') do if "%%~A"=="foo" echo.%%B

編輯:新增檢查爲第二個解決方案「過濾」設置結果,感謝JohannesRössel

+0

請注意,for循環在批處理文件中使用%% X,而在「終端」中使用%X – Anders 2010-04-28 20:48:46

+0

對於第二種變體,您應該希望沒有更多以'foo'開頭的變量。 – Joey 2010-04-29 17:00:25

+1

第一張,因爲它是印刷!foo! – Kamal 2010-05-03 17:00:57

0

注意!圍繞A instea d的%

@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET A=2 & ECHO !A! 
ENDLOCAL 
+0

我已經發布了類似的代碼... – Anders 2010-04-29 16:17:11

+0

@Anders真的嗎? – aphoria 2010-04-29 17:40:29

+0

它不適合我..它呼應! – Kamal 2010-04-29 21:06:04

0

添加到@Anders answers,我調整了自己的解決方案的東西,給你更多的靈活性:

set foo=bar&for /f %a in ('echo ^%foo^%') do @echo %a 

輸出:

bar 

這使您可以做字符串替換過:

set foo=bar&for /f %a in ('echo ^%foo^:a^=o^%') do @echo %a 

輸出:

bor 

編輯:添加一些插入修復@ jeb的評論。

+0

這不可靠。如果再次運行它,但將'bar'更改爲'ccc',它仍會回顯'bar' – jeb 2017-02-10 14:32:44

相關問題