เป็นเวลาหลายปีแล้วที่ฉันใช้cmd/DOS/Windows
เชลล์และส่งผ่านอาร์กิวเมนต์บรรทัดคำสั่งไปยังไฟล์แบตช์ ตัวอย่างเช่นผมมีไฟล์zuzu.bat
และในนั้นเข้าถึงฉัน%1
, %2
ฯลฯ ตอนนี้ผมต้องการที่จะทำเช่นเดียวกันเมื่อผมเรียกสคริปต์PowerShell
when I am in a Cmd.exe shell
ฉันมีสคริปต์xuxu.ps1
(และฉันได้เพิ่ม PS1 ลงในตัวแปร PATHEXT และไฟล์ PS1 ที่เชื่อมโยงกับ PowerShell) แต่ไม่ว่าฉันจะทำยังไงฉันก็ไม่สามารถรับอะไรจาก$args
ตัวแปรได้เลย มันมีความยาวเป็น 0 เสมอ
ถ้าฉันอยู่ในPowerShell
เปลือกหอยแทนที่จะcmd.exe
ได้ผล (แน่นอน) แต่ฉันยังไม่สบายใจพอที่จะอยู่ในสภาพแวดล้อม PowerShell แบบเต็มเวลา powershell.exe -command xuxu.ps1 p1 p2 p3 p4
ฉันไม่ต้องการที่จะพิมพ์ xuxu p1 p2 p3 p4
ฉันต้องการที่จะพิมพ์
เป็นไปได้หรือไม่และถ้าเป็นเช่นนั้นได้อย่างไร
ตัวอย่างที่ฉันไม่สามารถไปทำงานได้นั้นไม่สำคัญ foo.ps1:
Write-Host "Num Args:" $args.Length;
foreach ($arg in $args) {
Write-Host "Arg: $arg";
}
ผลลัพธ์มักจะเป็นเช่นนี้:
C:\temp> foo
Num Args: 0
C:\temp> foo a b c d
Num Args: 0
c:\temp>
xuxu p1 p2 p3 p4
")