Bagaimana cara saya melepaskan ampersand dalam file batch (atau dari baris perintah Windows) agar dapat menggunakan start
perintah untuk membuka halaman web dengan ampersand di URL?
Kutipan ganda tidak akan bekerja dengan start
; ini memulai jendela baris perintah baru sebagai gantinya.
Pembaruan 1 : Solusi Wael Dalloul bekerja. Selain itu, jika ada karakter yang dikodekan URL (mis. Spasi dikodekan sebagai% 20) di URL dan itu dalam file batch maka '%' harus dikodekan sebagai '%%'. Ini tidak terjadi dalam contoh.
Contoh, dari baris perintah ( CMD.EXE
):
start http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8
akan menghasilkan
http://www.google.com/search?client=opera
dibuka di browser default dan kesalahan ini di jendela baris perintah:
'rls' is not recognized as an internal or external command,
operable program or batch file.
'q' is not recognized as an internal or external command,
operable program or batch file.
'sourceid' is not recognized as an internal or external command,
operable program or batch file.
'ie' is not recognized as an internal or external command,
operable program or batch file.
'oe' is not recognized as an internal or external command,
operable program or batch file.
Platform: Windows XP 64 bit SP2.
windows
batch-file
escaping
ampersand
Peter Mortensen
sumber
sumber
start
mana menyebabkan mengutip argumen gagal jika diterapkan tanpa berpikir. Dan secara keseluruhan saya pikir menyertakan argumen dalam tanda kutip lebih mudah dan lebih rentan kesalahan daripada untuk melarikan diri setiap karakter yang perlu melarikan diri di sana.+
apa yang harus saya letakkan di depan untuk menghindarinya?start "http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8"
berfungsi karena PowerShell akan menghapus tanda kutipJawaban:
Dari cmd :
&
lolos seperti ini:^&
(berdasarkan jawaban @Wael Dalloul )%
tidak perlu melarikan diriSebuah contoh:
Dari file batch
&
lolos seperti ini:^&
(berdasarkan jawaban @Wael Dalloul )%
lolos seperti ini:%%
(berdasarkan pada pembaruan OPs)Sebuah contoh:
sumber
%
ini tidak perlu melarikan diri, karena siapa yang akan cukup konyol untuk didefinisikan20and
sebagai variabel lingkungan? Jika ya,start http://www.google.com/search?q=ampersand%20and%20percentage
bisa tautkan kehttp://www.google.com/search?q=ampersandsomething-silly20percentage
gantinya. Menggunakan^%
untuk melarikan diri dalam cmd, contoh berfungsi seperti yang diharapkan.&
digunakan untuk memisahkan perintah. Karena itu Anda dapat menggunakan^
untuk melarikan diri&
.sumber
+
apa yang harus saya letakkan di depan untuk menghindarinya?^
akan sangat berharga.Anda bisa menyertakannya dalam tanda kutip, jika Anda memberikan argumen dummy pertama.
Perhatikan bahwa Anda perlu memberikan argumen dummy pertama dalam kasus ini, karena
start
akan memperlakukan argumen pertama sebagai judul untuk jendela konsol baru, jika dikutip. Jadi yang berikut ini harus bekerja (dan lakukan di sini):sumber
start "http://www.google.com/search?client=opera&rls=en&q=escape+ampersand&sourceid=opera&ie=utf-8&oe=utf-8"
PowerShellsumber
Perintah
berfungsi seperti yang diharapkan, menghasilkan
Perintah
juga berfungsi, menulis string ke file "tmp". Namun, sebelum ada pipa
^ ditafsirkan sepenuhnya berbeda. Mencoba menulis output dari dua perintah "echo this" dan "that" ke pipa. Gema akan bekerja maka "itu" akan memberikan kesalahan. Pepatah
akan meletakkan string "ini" dan "itu" di clipboard.
Tanpa ^:
gema pertama akan menulis ke konsol dan hanya output gema kedua akan disalurkan ke klip (sama untuk pengalihan "> tmp"). Jadi, ketika output sedang diarahkan, ^ tidak mengutip & melainkan menyebabkannya diterapkan sebelum redirection daripada after.
Untuk menyalurkan &, Anda harus mengutipnya dua kali
Jika Anda memasukkan string ke dalam variabel
kemudian
akan menampilkan
tapi yang jelas
gagal karena, setelah Windows mengganti variabel, menghasilkan
itu mem-parsing ini sebagai perintah baru dan mencoba mengeksekusi "itu".
Dalam file batch, Anda dapat menggunakan ekspansi yang tertunda :
Untuk menghasilkan sebuah pipa, kita harus mengganti semua & s dalam nilai variabel dengan ^ &, yang bisa kita lakukan dengan% VAR: FROM = TO% sintaks:
Di baris perintah, "cmd / v" memungkinkan ekspansi tertunda:
Ini berfungsi bahkan saat menulis ke sebuah pipa
Sederhana.
sumber
echo this ^^^& that | clip
karya sederhana juga. Untuk memahami penanganan pipa ajaib Anda bisa membaca SO: Mengapa ekspansi tertunda gagal ketika di dalam blok kode pipa?Jika Anda perlu
echo
string yang berisi ampersand, tanda kutip tidak akan membantu, karena Anda akan melihatnya di output juga. Dalam kasus seperti itu, gunakanfor
:... dalam skrip kumpulan:
atau
sumber
Jika Anda memiliki spasi dalam nama file dan Anda memiliki karakter, Anda perlu melarikan diri:
Anda dapat menggunakan tanda kutip tunggal DAN ganda untuk menghindari misnomers dalam perintah.
The
^
karakter lolos tanda kutip sebaliknya.sumber