ฉันสามารถส่งขึ้นบรรทัดใหม่ในพารามิเตอร์บรรทัดคำสั่งไปยังไฟล์ปฏิบัติการ Windows ในไฟล์แบตช์ได้หรือไม่?


1

บอกว่าฉันมีไฟล์เรียกทำงานที่ฉันต้องการส่งผ่านพารามิเตอร์จาก .bat ไฟล์. การดักจับคือค่าพารามิเตอร์ต้องมี newline ในนั้น.

เมื่อฉันลองทำสิ่งต่อไปนี้:

"c:\folder\my app.exe" parameter="line1\nline2"

ผลลัพธ์ไม่ได้รับการตีความว่ามีบรรทัดใหม่ระหว่าง line1 และ line2.

ความคิดใดที่จะทำอย่างไร

คำตอบ:


1

ไม่ไม่ผ่านไฟล์แบตช์ แต่ไฟล์ exe หรือโปรแกรมอื่น ๆ สามารถส่งอาร์กิวเมนต์ที่มีบรรทัดใหม่ไปยังไฟล์ exe อื่น ๆ

ดังนั้นทางออกของคุณที่นี่คือการสร้างเครื่องมือเล็ก ๆ น้อย ๆ แยกวิเคราะห์ข้อโต้แย้งของคุณที่คุณจะเรียกว่า

runner "c:\folder\my app.exe" parameter="line1\nline2"

และมันจะทดแทน \n สำหรับอักขระ LF ที่แท้จริง (แสดงที่นี่เป็น ) และดำเนินการโทรโดยใช้ P / Invoke:

"c:\folder\my app.exe" parameter="line1↵line2"

อีกวิธีหนึ่งในการเอาชนะข้อ จำกัด นี้คือการใช้ PowerShell มันมีการแยกวิเคราะห์บรรทัดคำสั่งที่แตกต่างกัน



@DavidPostill - สวัสดีเดวิดโปรดดูประวัติคำตอบของฉัน มันสามารถทำได้ด้วย echoแต่ฉันลบมันออกจากคำตอบเพราะมันไม่สามารถทำได้กับไฟล์ exe ปกติและ OP ไม่สนใจ echo. echo ดูเหมือนจะเป็นข้อยกเว้น ฉันได้ทำการทดสอบจำนวนมากและค้นหาก่อนที่จะคืนคำตอบให้เป็นปัจจุบันว่าไม่สามารถทำได้ อย่างไรก็ตามฉันได้เห็นสิ่งนี้จะต้องทำอย่างสม่ำเสมอโดยนักพัฒนาเมื่อผ่าน P / Invoke วิธีนี้ใช้ได้ผลและนี่คือสิ่งที่ฉันแนะนำในคำตอบ ดูเหมือนว่าส่วนที่แยกเป็นการแยกบรรทัดคำสั่ง cmd.
miroxlav

ยุติธรรมพอสมควร ฉันไม่มีไฟล์ exe ฉันสามารถทดสอบได้
DavidPostill

@DavidPostill - คุณยังสามารถทดสอบได้ cmd /c echo ...... :)
miroxlav

0

ไม่สามารถทำได้

คล้ายกับสาเหตุที่คำสั่ง chown Unix ใช้โคลอนเป็นตัวคั่น: chown จะถือว่าชื่อผู้ใช้ลงท้ายด้วยโคลอน เช่นเดียวกันแบตช์ไฟล์มีรูปแบบไฟล์

รูปแบบไฟล์ของไฟล์แบทช์ถือว่าตัวละครขึ้นบรรทัดใหม่สิ้นสุดบรรทัด ไม่มีลำดับหลบหนีที่รองรับ ดังนั้นสิ่งที่คุณขอไม่สามารถทำได้

วิธีแก้ไขปัญหาหนึ่งที่เป็นไปได้คือถ้าโปรแกรมรับรู้ลำดับการหลีกเลี่ยงเช่นการจดจำ \ n (JScript สนับสนุนเป็นไฟล์. js ที่ CScript สามารถใช้ได้รองรับคำสั่ง unescape WScript.Echo(unescape("%0d0a")); )

อีกวิธีที่ใช้กันทั่วไปในการจัดการนี้คือถ้าโปรแกรมรองรับกระแสข้อมูลซึ่งอาจเป็นชื่อไฟล์ที่ระบุหรือกระแสข้อมูล "อินพุตมาตรฐาน" อักขระบรรทัดใหม่ / ลำดับสามารถให้กับโปรแกรมด้วยวิธีการที่

วิธีการเหล่านั้นถูกใช้โดยหลายโปรแกรม ฉันไม่ได้นึกถึงวิธีใด ๆ เพียงแค่แบตช์ละเว้นอักขระบรรทัดใหม่หรือวิธีมาตรฐานอื่น ๆ เพื่อพยายามเข้ารหัสอักขระนั้นในแบบที่ทุกโปรแกรมส่วนใหญ่จะรู้จักอักขระที่คุณพยายามอ้างอิง ไปยัง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.