apakah ada jalan keluar untuk karakter '&' di command prompt?

11

Saya mencoba sesuatu seperti:

set pwd = abc&123
echo password %pwd%

Saya mendapatkan hasilnya sebagai ...

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

Apakah sistem seperti ini atau ada jalan keluar untuk karakter seperti itu?

deostroll
sumber
1
Pertanyaan yang sama dalam SO Bagaimana cara saya melepaskan ampersand dalam file batch?
Michael Freidgeim

Jawaban:

9

Yang perlu Anda lakukan adalah membungkus kata sandi Anda dengan tanda kutip ganda seperti:

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

Biarkan saya tahu bagaimana kelanjutannya.

Carlos
sumber
1
Pilihan lain yang mungkin lebih disukai dalam beberapa skenario adalahset "pwd=abc&123"
Harry Johnston
1
-1 ini mengejutkan bahwa ini memiliki 5 upvotes, itu salah. Windows menggunakan% var% atau! Var! Anda bisa mengujinya sendiri dengan mudah. $ var ada di linux, jika Anda echo $ var di windows itu hanya mengatakan secara harfiah $ var
barlop
1
@barlop: melihat bahwa itu adalah baris lain yang menjawab pertanyaan, saya tidak melihat bahwa itu penting.
Harry Johnston
7

Saya menemukan bahwa itu bekerja paling baik dengan kombinasi jawaban martineau dan jawaban mastashake57.

set pwd=abc^&123
echo %pwd%

Masih gagal, dan

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

Menambahkan tanda kutip (Anda tidak dapat menghapus tanda kutip dengan formanipulasi loop atau string karena akan gagal lagi, terima kasih kepada ampersand), yang tidak terlalu bagus.

Namun,

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

Bekerja dengan sempurna.

Semoga itu bisa membantu.

BDM
sumber
+1. Ketahuilah bahwa ini membiarkan karat di variabel lingkungan, yaitu, set pwdke abc^&123. Sebagian besar waktu ini mungkin tepat apa yang perlu Anda lakukan, tetapi itu bisa membuat Anda keluar jika Anda tidak menyadari apa yang terjadi.
Harry Johnston
@ HarryJohnston Saya harus memperbaiki kesalahan ejaan Anda. Ini peduli. btw saya tahu ntcmds.chm menyebutkannya, tapi di mana di cmd /? Dokumentasi apakah disebutkan tentang tanda sisipan menjadi karakter pelarian?
barlop
@ Blarlop: begitulah; Saya bingung dengan homonimnya. Sebagai aturan umum /?hanya menyediakan ringkasan, bukan dokumentasi yang komprehensif.
Harry Johnston
@barlop,? Tanda sisipan adalah karakter pelarian.
Pacerier
@Pacerier ya, caret adalah karakter pelarian, tidak ada yang tidak setuju dengan itu. dan disebutkan bahwa itu adalah karakter pelarian, di ntcmds.chm (ntcmds.chm datang dengan XP dan dalam microsoft.com/resources/documentation/windows/xp/all/proddocs/… dan mungkin dalam beberapa cara lebih terkini online - mungkin lebih banyak perintah). Saya hanya bertanya di mana di /? (jika ada), dikatakan bahwa caret adalah karakter pelarian
barlop
7

Dari file bantuan referensi baris perintah:

Ampersand (&), pipe (|), dan tanda kurung () adalah karakter khusus yang harus didahului oleh karakter escape (^) atau tanda kutip ketika Anda memberikannya sebagai argumen.

Sepertinya memasukkan seluruh kata sandi dalam tanda kutip akan lebih mudah daripada melarikan diri karakter individu jika ada lebih dari dua karakter di dalamnya yang membutuhkan perawatan.

martineau
sumber
Dan kutipan dalam kutipan?
Pacerier
4

Yang benar-benar Anda butuhkan adalah:

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

Atau:

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

Penjelasan:

Karena &adalah char khusus, Anda harus menghindarinya ^, menghasilkan ^&.

Menjalankan set pwd=abc^&123akan mengatur variabel ke nilai abc&123. Setelah itu, jika Anda berlari echo %pwd%, Anda berjalan secara efektif echo abc&123.

Namun echo abc&123tidak berfungsi seperti yang Anda harapkan, karena &ini adalah char khusus. Anda dapat menghindari ini dengan menambahkan tanda kutip: echo "abc&123"tetapi output Anda akan memiliki tanda kutip juga. Dengan kata lain, menggunakan tanda kutip bukanlah solusi yang tepat.

Yang Anda butuhkan adalah untuk menghindari &char ketika Anda menjalankan echoperintah:

echo abc^&123

Jadi variabel perlu mengandung nilai abc^&123. Untuk mengatur variabel ke nilai abc^&123, Anda harus keluar dari karakter khusus ^dan &, menghasilkan:

set pwd=abc^^^&123
Pacerier
sumber
+1 untuk menunjukkan perlunya lolos dari caret
jmcg
Bagus sekali, terima kasih. Karakter pelarian ini tidak disebutkan dalam dokumen dok dalam beberapa alasan docs.microsoft.com/en-us/windows-server/administration/…
Sergey Smolnikov