อะไรคือความแตกต่างระหว่างสคริปต์ cmd ต่อไปนี้


10

ฉันได้ลองเปิดตัวหลายโปรแกรมผ่านไฟล์แบตช์และพบปัญหา แต่ในอดีต

ฉันค่อนข้างใหม่กับสคริปต์และบรรทัดคำสั่งและนี่จะเป็นคำถามของฉัน: cmd script ต่อไปนี้แตกต่างกันอย่างไร

อันนี้เป็นที่ยอมรับ

Start Chrome

(ฉันเดาที่นี่ว่าบางโปรแกรมที่ติดตั้งได้รับการยอมรับตามชื่อแม้ว่า dir ไม่ได้อยู่ที่ chrome.exe เป็นโปรแกรมที่ยังคงเปิดตัวคีย์รีจิสทรีมีส่วนร่วมในเรื่องนี้?)

อันนี้ใช้ได้เช่นกัน

cd "FOO_DIR"
start FOO.exe

อย่างไรก็ตามสิ่งเหล่านี้ไม่ได้

start "FOO_DIR\FOO.exe"

(เปิดหน้าต่างใหม่โดยไม่เรียกใช้ FOO.exe)

start /B "FOO_DIR\FOO.exe"

(เขียนข้อความลิขสิทธิ์อีกครั้งและไม่ทำอะไรเลย)

(ระบบปฏิบัติการ Windows 7 x64)

คำตอบ:


17
Start Chrome

อันนี้ใช้งานได้เพราะปฏิบัติการของ Chrome ตั้งอยู่ในโฟลเดอร์ที่อยู่ในPATHตัวแปรสภาพแวดล้อม startค้นหาโปรแกรมในโฟลเดอร์ทั้งหมดในตัวแปรนั้น ตัวแปรสภาพแวดล้อมPATHEXTมีรายชื่อของนามสกุลไฟล์ที่จะมองหาและเป็นอยู่โดยค่าเริ่มต้นที่คุณไม่จำเป็นต้องเขียน.exechrome.exe


start "FOO_DIR\FOO.exe"

สิ่งนี้ใช้ไม่ได้เพราะstartจะใช้อาร์กิวเมนต์ตัวแรกเป็นหัวเรื่องของหน้าต่างหากมีการเสนอราคา ดังนั้นสิ่งนี้จะเปิด CMD ใหม่ด้วย"FOO_DIR\FOO.exe"เป็นชื่อของมัน

ในการหลีกเลี่ยงสิ่งนี้คุณสามารถเพิ่มอาร์กิวเมนต์ชื่อว่างไว้ข้างหน้าคำสั่งของคุณ:

start "" "FOO_DIR\FOO.exe"

นอกจากนี้ AFAIR, ชื่อเรื่องเป็นสิ่งจำเป็นเมื่อเรียกใช้งาน executables ด้วยสวิตช์บรรทัดคำสั่ง
abstrask

1
ไม่ใช่ว่าstartจะคาดว่าชื่อจะเป็นอาร์กิวเมนต์แรก ( start chromeไม่เช่นนั้นจะใช้งานไม่ได้) ก็คือหากมีการอ้างถึงอาร์กิวเมนต์แรกมันจะต้องเป็นชื่อ
jamesdlin

@jamesdlin อ่าเอกสารเกี่ยวกับเรื่องนี้ค่อนข้างคลุมเครือขอบคุณ ฉันแก้ไขคำตอบตามนั้น
crater2150

5

ลองเพิ่ม"title"หรืออย่างน้อย""หลังจากstartนี้:

start "title" "FOO_DIR\FOO.exe"

หรือ

start "title" /B  "FOO_DIR\FOO.exe"

สาเหตุหลักของปัญหาคืออาร์กิวเมนต์แรกในเครื่องหมายคำพูด "" ถูกตีความเป็นtitleพารามิเตอร์สำหรับcmdหน้าต่างใหม่

นอกจากนี้ยังช่วยให้ดูที่การอ้างอิงคำสั่ง(ลิงค์)


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

หากคุณกำลังพูดถึงตัวอย่าง firts ของคุณด้วยstart chromeฉันเชื่อว่าการเรียก chrome ทำงานได้เนื่องจากมีรายการในรีจิสตรีที่นี่: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App เส้นทางหากคุณมอง chrome.exe คุณจะเป็นไปได้มากที่สุด ค้นหารายการที่มีเส้นทางแบบเต็มเพื่อเรียกใช้งานได้
Art Gertner
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.