Bagaimana cara saya melepaskan tanda kutip pada -param
nilai di baris perintah berikut dengan benar?
$cmd="\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'""
Invoke-Expression $cmd
Ini tentu saja gagal. Saya mencoba untuk melepaskan diri dari tanda kutip (tunggal dan ganda) menggunakan karakter escape` dan melakukan berbagai kombinasi, tetapi tidak ada yang berhasil.
powershell-2.0
eetawil
sumber
sumber
$someCommandStringWithDoubleQuotes | cmd
. Ini sebenarnya bekerja dari skrip PowerShell (misalnya menjalankan CMake (yang memang memerlukan tanda kutip ganda (jika tidak maka akan gagal secara diam-diam))). Alternatif untuk CMD adalah bash.exe ( MinGW ) - tetapi mungkin sangat, sangat lambat untuk memulai dalam beberapa keadaan.Jawaban:
Parameter pelarian seperti itu biasanya menjadi sumber frustrasi dan terasa seperti waktu yang terbuang percuma. Saya melihat Anda menggunakan v2, jadi saya sarankan untuk menggunakan teknik yang dibuat oleh Joel "Jaykul" Bennet di blog beberapa waktu yang lalu .
Singkat cerita: Anda cukup membungkus string Anda dengan @ '...' @:
(Ingatlah bahwa saya mengasumsikan kutipan mana yang diperlukan, dan hal-hal yang Anda coba hindari.) Jika Anda ingin bekerja dengan output, Anda mungkin ingin menambahkan
-NoNewWindow
sakelar.BTW: ini adalah masalah yang sangat penting sehingga sejak v3 Anda dapat menggunakan
--%
untuk menghentikan pengurai PowerShell melakukan apa pun dengan parameter Anda:... harus bekerja dengan baik di sana (dengan asumsi yang sama).
sumber
@"
dan"@
sebagai gantinya.Menggunakan backtick (`) berfungsi dengan baik untuk saya jika saya meletakkannya di tempat-tempat berikut:
$cmd
kembali sebagai:Itukah yang kamu cari?
Kesalahan yang diberikan PowerShell kepada saya mengacu pada token tak terduga 'sort1', dan begitulah cara saya menentukan di mana harus meletakkan backticks.
Sintaks @ '...' @ disebut "string di sini" dan akan mengembalikan apa yang dimasukkan. Anda juga dapat menggunakannya untuk mengisi variabel dengan cara berikut:
Simbol pembuka dan penutup harus berada pada barisnya masing-masing seperti gambar di atas.
sumber
Invoke-Expression
menghapus tanda kutip ganda dari$cmd
saat dipanggil? Atau bagaimana Anda menggunakan$cmd
tanpa menggunakanInvoke-Expression
?Saya menemukan diri saya dalam kesulitan yang sama hari ini ketika mencoba menjalankan perintah melalui modul Node.js:
Saya menggunakan PowerShell dan mencoba menjalankan:
Tetapi dengan simbol tambahan, PowerShell mengacaukan argumen. Untuk memperbaikinya, saya mencentang ulang tanda kutip ganda yang lolos:
sumber
"['`"][^'`"]['`"]"
berhasil… tetapi'[`'"][^`'"][`'"]'
tidak! membuatku gila