Tôi thấy ba cách giải quyết có thể xảy ra.
1) Tạo đường kết hợp nhiều tham số.
@echo off
SETLOCAL EnableDelayedExpansion
set "line="
for %%a in ("line1"
"line2"
"line3"
"line4"
) do set line=!line!%%~a
echo !line!
2) Rời bỏ "quote" vào cuối mỗi dòng
@echo on
SETLOCAL EnableDelayedExpansion
set "line=line1 & x#"^
"line2 & a#"^
"line3 & b #"^
"line4 & c "
set "line=!line:#" "=!"
echo !line!
Không gian đầu tiên trong mỗi dòng là rất quan trọng, bởi vì caret làm việc nhân vật như nhiều dòng nhưng nó cũng thoát ký tự đầu tiên, do đó, một báo giá sẽ được thoát.
Vì vậy, tôi thay thế "#" unnessary sau khi tạo đường.
EDIT Added: 3) Biến mất trích
setlocal EnableDelayedExpansion
echo "A very long line I want to !"=!^
split into two lines"
Theo tôi đây là tốt nhất cách, nó hoạt động như phân tích cú pháp đầu tiên nhìn thấy có dấu ngoặc kép và do đó caret cuối cùng sẽ làm việc, vì nó dường như nằm ngoài dấu ngoặc kép.
Nhưng biểu thức !"=!
này sẽ mở rộng biến có tên là "=
, nhưng một tên biến không thể tồn tại (dấu bằng chỉ có thể xảy ra dưới dạng ký tự đầu tiên) để mở rộng thành không có gì.
Bạn cũng có thể tạo các biểu thức an toàn an toàn, chúng sẽ luôn thoát khỏi dấu ngoặc kép, độc lập nếu có báo giá hoặc không nằm trong dòng.
!"^"=!
echo This multiline works !"^"=!^
as expected
echo "This multiline works !"^"=!^
too"
Nếu bạn muốn tránh mở rộng chậm, bạn cũng có thể sử dụng một -để-Vòng như
for %%^" in ("") do (
echo "This multiline works %%~"^
too"
)
Câu trả lời không đơn giản, nhưng đây là một số thủ thuật thú vị! Tôi muốn tôi có thể có nhiều upvotes. Cảm ơn! –
Tôi thực sự thực sự thích phương pháp # 1. Có bất kỳ của gotcha trên phương pháp đó? – djangofan
Không thành công với các ký tự như '*?' Và, vì vòng lặp for cố gắng sử dụng chúng làm ký tự đại diện. Nhưng sau đó bạn có thể chuyển sang một vòng lặp FOR/F – jeb