如何在批處理文件中的多行上拆分長命令? 測試
(這基本上是對Wayne答案的重寫,可是因爲對插入符號的混淆被清除了。因此我把它做爲CW發佈。我並不羞於編輯答案,但徹底重寫它們彷佛不合適。) spa
您可使用插入符號( ^
)分隔長行,只需記住插入符號及其後面的換行符將徹底從命令中刪除 ,所以若是您將其放在須要空格的位置(例如參數之間),請必定要包括空格(在^
以前,或在下一行的開頭 - 後一個選擇可能有助於使它更清晰,這是一個延續)。 code
示例:( 全部在Windows XP和Windows 7上測試過) three
xcopy file1.txt file2.txt
能夠寫成: 字符串
xcopy^ file1.txt^ file2.txt
要麼 get
xcopy ^ file1.txt ^ file2.txt
甚至 io
xc^ opy ^ file1.txt ^ file2.txt
(最後一個是有效的,由於xc
和^
沒有空格,下一行的開頭沒有空格。因此當你刪除^
和換行符時,你會獲得... xcopy
。) for循環
爲了便於閱讀和理智,最好只在參數之間進行分解(確保包含空格)。 變量
確保^
不是批處理文件中的最後一件事,由於這彷佛是一個主要問題 。 擴展
然而,彷佛在for循環的值的中間分割不須要插入符號(實際上嘗試使用一個將被視爲語法錯誤)。 例如,
for %n in (hello bye) do echo %n
請注意,在hello以後或再見以前甚至不須要空格。
多個命令能夠放在括號中並分佈在多個行中; 因此像echo hi && echo hello
類的東西能夠像這樣:
( echo hi echo hello )
變量也能夠幫助:
set AFILEPATH="C:\SOME\LONG\PATH\TO\A\FILE" if exist %AFILEPATH% ( start "" /b %AFILEPATH% -option C:\PATH\TO\SETTING... ) else ( ...
另外我注意到插入符號( ^
) if
條件因素只有在存在空格時才能使用它們:
if exist ^
插入符號的規則是:
在行尾的插入符號附加下一行,附加行的第一個字符將被轉義。
您能夠屢次使用插入符號,但完整的行不得超過〜8192個字符的最大行長度(Windows XP,Windows Vista和Windows 7)。
echo Test1 echo one ^ two ^ three ^ four^ * --- Output --- Test1 one two three four* echo Test2 echo one & echo two --- Output --- Test2 one two echo Test3 echo one & ^ echo two --- Output --- Test3 one two echo Test4 echo one ^ & echo two --- Output --- Test4 one & echo two
要禁止轉義下一個字符,可使用重定向。
重定向必須在插入符號以前。 可是在插入符號以前存在一種重定向的好奇心。
若是您在插入符號處放置令牌,則會刪除令牌。
echo Test5 echo one <nul ^ & echo two --- Output --- Test5 one two echo Test6 echo one <nul ThisTokenIsLost^ & echo two --- Output --- Test6 one two
而且還能夠將換行符嵌入到字符串中:
setlocal EnableDelayedExpansion set text=This creates ^ a line feed echo Test7: %text% echo Test8: !text! --- Output --- Test7: This creates Test8: This creates a line feed
空行對成功相當重要。 這僅適用於延遲擴展,不然換行後將忽略該行的其他部分。
它有效,由於行末端的插入符號忽略下一個換行符並轉義下一個字符,即便下一個字符也是換行符(在此階段始終忽略回車符)。
只要您記住插入符號及其後面的換行符被徹底刪除,您就可使用插入符號^
來劃分長行。 所以,若是應該有一個空間,你要打破線,包括一個空格。 ( 更多關於如下內容。 )
例:
copy file1.txt file2.txt
將寫成:
copy file1.txt^ file2.txt