![cmd中「(」是什麼意思](https://rvso.com/image/1525442/cmd%E4%B8%AD%E3%80%8C(%E3%80%8D%E6%98%AF%E4%BB%80%E9%BA%BC%E6%84%8F%E6%80%9D.png)
每當我輸入 an (
, ie ,an左括號在裡面命令提示符, 有時候是這樣的:
(
More?
如果我繼續打字(
或者 任何其他字符,它會提示我相同的訊息。這已停止,如果我輸入)
,即右括號,雖然我確實收到一個錯誤,其中寫著:
) was unexpected at this time
除此之外,我找不到這個指令的作用。有什麼想法嗎?
答案1
() 並不是真正的命令,而是一個分組運算符,它允許您將一系列命令組合在一起,以便在 CMD shell 通常期望出現單一命令的位置使用它。
() 之間的命令實際上是在單獨的 CMD 實例中執行的。當您手動輸入“(”時,您將輸入該新實例並等待您的命令。
if not exist c:\myfile (
echo File doesn't exist
) else (
echo File DOES exists
del c:\myfile
)
請注意,通常 IF ELSE 應位於同一行,並且您只能在 THEN 和 ELSE 子句中執行單一命令。
使用「()」將整個 (xxxxx) 區塊視為單一命令,甚至就像它出現在同一行中一樣。
答案2
這裡已經發布了很多好的信息 - 例如,括號是“一個分組運算符,允許您將一系列命令組合在一起,以便在 CMD shell 通常期望出現單一命令的地方使用它”那「就像一個開始區塊和端區塊」——但有些簡單的事情卻被忽略了:
1. 如何避免「此時意外」錯誤
您只需在提示字元下鍵入命令即可獲得有用的結果More?
:
C:\> (
More? date /t
More? )
Tue 04/11/2017
C:\> (
More? dir \Windows\win.ini
More? )
Volume in drive C is OS
Volume Serial Number is ▒▒▒▒-▒▒▒▒
Directory of C:\Windows
08/13/2014 12:26 PM 435 win.ini
1 File(s) 435 bytes
0 Dir(s) ▒▒▒,▒▒▒,▒▒▒,▒▒▒ bytes free
C:\>
您可以在不同的行中鍵入多個命令,並且可以將)
向上移動到最後一行的末尾:
C:\> (
More? date /t
More? time /t
More? )
Tue 04/11/2017
06:18 PM
C:\> (
More? date /t
More? time /t)
Tue 04/11/2017
06:18 PM
C:\>
2. 如何(
影響)
命令的含義?
正如其他人指出的那樣,有類似的命令
C:\> for %f in (\Windows\*.dll) do @echo %f
其中(
…)
是指令本身語法的一部分(FOR
在本例中為 )。如果刪除括號,則會出現語法錯誤。我不是說這個。
就像聲明的那樣令人作嘔, 括號團體命令。考慮這個命令列:
echo cat & echo dog | findstr /n a
它的意思是
- 做
echo cat
,然後 - 由於
echo dog | findstr /n a
單字“dog”不包含字母“a”,因此該命令不會產生任何輸出。
因此,上面的輸出是
C:\> 迴聲貓 & 迴聲狗 |找str /na 貓
相似地,
C:\> 迴聲貓 & 迴聲狗 |找str /否 貓 1:狗
其中我們得到了額外的1:dog
輸出,因為“dog”做包含“o”,“dog”是第一個(1st) 指令輸入行findstr
。
現在考慮
(echo cat & echo dog) | findstr /n a
(與上面相同,但添加了括號),這意味著
- 做
echo cat
,
然後
做echo dog
,然後 - 獲取上面的輸出並將其通過管道傳輸到
findstr /n a
所以,
C:\> (迴聲貓 & 迴聲狗) |找str /na 1:貓 C:\> (迴聲貓 & 迴聲狗) |找str /否 2:狗
因為命令列左側(#1)的輸出是
cat
dog
而「a」是在網路上找到的1該文本的“o”是在線找到的2。我們不再得到僅顯示cat
(沒有行號)的輸出行,因為它echo cat
不再是一個獨立的命令,而是團體它構成了管道的左側。
這是命令分組的一個更簡單的範例:
C:\Temp> echo cat & echo dog > animals
cat
C:\Temp> type animals
dog
C:\Temp> (echo cat & echo dog) > animals
C:\Temp> type animals
cat
dog
當然,如上面和其他答案所示,您可以在群組內添加換行符:
C:\> ( 更多的?迴聲貓 更多的?迴聲狗 更多的? ) |找str /na 1:貓
3. 括號是否會建立一個新的 CMD 實例?
我不這麼認為;不是以任何明顯、有意義的方式:
C:\> (cd windows)
C:\Windows> set a=aardvark
C:\Windows> (set a=bat)
C:\Windows> echo %a%
bat
請注意,cd
括號內的內容會變更主 CMD 進程的工作目錄,且set
括號內的內容會覆寫括號外設定的變數值。
答案3
( 和 ) 就像一個begin block
and end block
。任何可以放入批次檔 (.bat) 中的內容都可以輸入到命令列中。
例如,我可以編寫一個批次文件,可以將語句區塊放入if
:
if "%1"=="" (
echo Multiple
echo Lines when no parameter
)
echo END
(
現在,當我運行不帶參數的批次時,我會得到和之間的所有命令)
來運行。當提供第一個參數時,唯一的輸出是“END”。
現在回到命令列:我不知道有什麼技巧或技術可以透過直接在命令列上鍵入來實際使用它。但它確實遵循相同的規則。在命令列上如果輸入以下內容:
(echo "1" & echo "2")
輸出是:
1
2