Có một lối thoát cho ký tự '&' trong dấu nhắc lệnh không?


11

Tôi đang thử một cái gì đó như:

set pwd = abc&123
echo password %pwd%

Tôi nhận được kết quả là ...

'123' is not recognized as an internal or external command, operable program or batch file. 
password abc

Là hệ thống như thế này hay có một lối thoát cho các nhân vật như vậy?


Câu trả lời:


9

Những gì bạn cần làm là bọc mật khẩu của bạn trong dấu ngoặc kép như vậy:

set pwd="abc&123"
echo %pwd%

Cho tôi biết làm thế nào nó đi.


1
Một lựa chọn khác có thể thích hợp hơn trong một số tình huống làset "pwd=abc&123"
Harry Johnston

1
-1 thật sốc khi điều này đã có 5 lần nâng cấp, thật sai lầm. Windows sử dụng% var% hoặc! Var! bạn có thể tự mình kiểm tra nó một cách dễ dàng. $ var là trong linux, nếu bạn lặp lại $ var trong windows thì nó chỉ nói theo nghĩa đen $ var
barlop

1
@barlop: xem như là dòng khác giải quyết câu hỏi, tôi không thấy nó quan trọng.
Harry Johnston

7

Tôi thấy rằng nó hoạt động tốt nhất với sự kết hợp của cả câu trả lời của martineau và câu trả lời của mastashake57.

set pwd=abc^&123
echo %pwd%

Vẫn thất bại, và

set pwd="abc&123"
echo %pwd%

Thêm dấu ngoặc kép vào nó (bạn không thể xóa dấu ngoặc kép bằng thao tác forvòng lặp hoặc chuỗi bởi vì nó sẽ thất bại một lần nữa, nhờ vào dấu và), điều đó không tuyệt vời lắm.

Tuy nhiên,

set "pwd=abc^&123"
echo %pwd%

Hoạt động hoàn hảo.

Mong rằng sẽ giúp.


+1. Xin lưu ý rằng điều này để lại carat trong biến môi trường, nghĩa là, nó được đặt pwdthành abc^&123. Hầu hết thời gian này có lẽ chính xác là những gì bạn cần làm, nhưng nó có thể khiến bạn hiểu ra nếu bạn không biết chuyện gì đang xảy ra.
Harry Johnston

@HarryJohnston Tôi phải sửa lỗi chính tả của bạn. Đó là carEt. btw Tôi biết ntcmds.chm đề cập đến nó, nhưng ở đâu trong cmd /? Tài liệu được đề cập về việc caret là nhân vật thoát?
barlop

@Barlop: vậy thôi; Tôi đã nhầm lẫn nó với từ đồng âm. Như một quy tắc chung /?chỉ cung cấp một bản tóm tắt, không phải là tài liệu toàn diện.
Harry Johnston

@ barlop ,? Các caret là nhân vật thoát.
Pacerier

@Pacerier vâng, caret là nhân vật thoát hiểm, không ai không đồng ý với điều đó. và nó được đề cập rằng đó là ký tự thoát, trong ntcmds.chm (ntcmds.chm đi kèm với XP và trong một microsoft.com/resource/documentation/windows/xp/all/proddocs/iêu và có thể trong một số cách cập nhật trực tuyến hơn - có thể nhiều lệnh hơn). Tôi chỉ hỏi nơi trong /? (nếu ở bất cứ đâu), nó nói rằng caret là nhân vật thoát
barlop

7

Từ tệp trợ giúp tham chiếu dòng lệnh:

Dấu và (&), pipe (|) và dấu ngoặc đơn () là các ký tự đặc biệt phải được đặt trước ký tự thoát (^) hoặc dấu ngoặc kép khi bạn chuyển chúng dưới dạng đối số.

Có vẻ như việc đặt toàn bộ mật khẩu trong dấu ngoặc kép sẽ dễ dàng hơn việc thoát từng ký tự riêng lẻ nếu có nhiều hơn hai ký tự cần xử lý.


Và báo giá trong dấu ngoặc kép?
Pacerier

4

Những gì bạn thực sự cần là:

set pwd=abc^^^&123
echo %pwd%

Hoặc là:

set "pwd=abc^&123"
echo %pwd%

Giải trình:

&là một char đặc biệt, bạn phải thoát khỏi nó ^, dẫn đến ^&.

Chạy set pwd=abc^&123sẽ đặt biến thành giá trị abc&123. Sau đó, nếu bạn chạy echo %pwd%, bạn đang chạy hiệu quả echo abc&123.

Tuy nhiên, echo abc&123không hoạt động như bạn mong đợi, bởi vì &là một char đặc biệt. Bạn có thể tránh điều này bằng cách thêm dấu ngoặc kép: echo "abc&123"nhưng đầu ra của bạn cũng sẽ có dấu ngoặc kép . Nói cách khác, sử dụng dấu ngoặc kép không chính xác là một giải pháp thích hợp.

Những gì bạn cần là thoát khỏi &char khi bạn chạy echolệnh:

echo abc^&123

Vì vậy, biến cần chứa giá trị abc^&123. Để đặt biến thành giá trị abc^&123, bạn sẽ cần phải thoát các ký tự đặc biệt ^&, dẫn đến:

set pwd=abc^^^&123

+1 để chỉ ra sự cần thiết phải thoát khỏi dấu mũ
jmcg

Hoạt động tuyệt vời, cảm ơn bạn. Nhân vật thoát này không được đề cập trong tài liệu trong một số lý do docs.microsoft.com/en-us/windows-server/ad dùng / trộm
Serge Smolnikov
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.