การส่งผ่านอาร์กิวเมนต์บรรทัดคำสั่งไปยังสคริปต์ชุดของ windows


10

ฉันต้องสร้างสคริปต์ชุด windows ที่ฉันต้องผ่านอาร์กิวเมนต์บรรทัดคำสั่งไม่กี่ ข้อโต้แย้งเหล่านี้อาจปรากฏขึ้นในลำดับใด ๆ แต่สคริปต์ควรเลือกอย่างเหมาะสมตามชื่ออาร์กิวเมนต์ เช่น:

<scriptname> -age <agevalue> -gender <gender>
<scriptname> -gender <gender> -age <agevalue>

สคริปต์สามารถเรียกได้ด้วยสองวิธีดังกล่าวข้างต้น แต่ควรเลือกอายุและเพศอย่างเหมาะสมและกำหนดให้กับตัวแปร อาร์กิวเมนต์สามารถระบุได้โดยสวิตช์ก่อนหน้า - เช่น -age, -gender ฯลฯ

ใครช่วยได้โปรดยกตัวอย่างการระบุสิ่งนี้เป็นการภายใน?

คำตอบ:


10

ชุดน่าเสียดายที่ไม่ได้มีในตัวgetopsฟังก์ชั่นเช่นไม่ อย่างไรก็ตามคุณสามารถใช้ตัวแปรของคนจนของคุณเอง:

:GETOPTS
 if /I %~1 == --age set AGE=%2& shift
 if /I %~1 == --gender set GENDER=%2& shift
 shift
if not (%1)==() goto GETOPTS

นี่อาจเป็นเรื่องยุ่งยากเนื่องจากจำนวนอาร์กิวเมนต์มีมากเกิน แต่มันเหมาะสมกับการเรียกเก็บเงิน ขอบคุณ
Dhiwakar Ravikumar

1
การติดตามrobvanderwoude.com/if.phpจะเป็นการดีกว่าที่จะเขียนif /I "%~1" == "--age" ... (หมายเหตุตัวหนอน) นอกจากนี้ยังใช้งานได้กับพารามิเตอร์ว่างหรือพารามิเตอร์ที่ใส่ในเครื่องหมายคำพูดคู่
Axel Kemper

คุณอาจต้องการเพิ่มเครื่องหมายคำพูดคู่ มิฉะนั้นคำสั่งไม่ทำงานกับพารามิเตอร์ที่ว่างเปล่า% 1
Axel Kemper

หากข้อโต้แย้งที่เป็นไปได้ต่าง ๆ ของคุณมีรูปแบบหรือประเภทที่กำหนดเช่นอายุ (เป็นตัวเลข) และเพศ (เป็น "M" หรือ "F") คุณไม่ควรกำหนดอาร์กิวเมนต์ แต่ให้ใช้การจดจำการเปรียบเทียบเพื่อกำหนดให้ ตัวแปรที่เหมาะสมภายในสคริปต์ ฉันทำสิ่งนี้เพื่อสคริปต์ชุดแรกที่ฉันเขียนในช่วงการเปลี่ยนภาพระหว่าง 9x และ XP ในงานไอทีครั้งแรกของฉัน สคริปต์สามารถยอมรับข้อโต้แย้งสำหรับประเภทระบบปฏิบัติการไดรฟ์ที่สคริปต์เรียกใช้และบางสิ่งอื่น ๆ หรือตรวจหาการตั้งค่าที่เหมาะสมโดยอัตโนมัติ overkill เล็กน้อย แต่การออกกำลังกายที่สนุกสนาน
music2myear

8

คุณทำกับ Powershell ได้ไหม? หรือมันจำเป็นต้องเป็นชุด? Powershell ทำให้ดีและใช้งานง่ายคุณเพียงแค่เพิ่มสิ่งนี้ที่ด้านบนสุดของสคริปต์ของคุณจากนั้นคุณสามารถเรียกแต่ละพารามิเตอร์ในลำดับใดก็ได้

param (
[string]$Age,
[string]$Gender
)

คุณสามารถทำได้ด้วยแบทช์ แต่จะต้องมีการตรวจสอบพารามิเตอร์จำนวนมาก .. ต่อไปนี้เป็นลิงค์ของสคริปต์แบทช์บางตัวที่ทำ

http://www.ericphelps.com/batch/samples/arguments.bat.txt

(ตัวอักษรที่เป็นไปได้ของ)

/programming/5215729/is-there-a-way-to-pass-parameters-by-name-and-not-by-order-to-a-batch-bat-f


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