วันจันทร์ที่ 23 กันยายน พ.ศ. 2556

ปูพื้นฐาน (ขั้นเทพ) Batch File ตอน 11

ไปป์ปิ้ง หรือต่อท่อ ให้กับคำสั่ง...แบตช์ไฟล์นั้นจะทำงานได้ไม่สมบรูณ์เลย...ถ้าไม่มีคำสั่งพวกนี้...และคำสั่งพวกนี้คืออะไร...ยกตัวอย่างเช่น คุณต้องการส่งข้อความ Yes ไปที่คำสั่ง Format C: ถ้าใน VB6 คุณอาจใช้ Sendkey เพื่อจำลองแป้นพิมพ์ แต่ภาษาบน Console นั้น API ไม่ได้ตอบรับกับภาษาพวกนี้...ตัวระบบปฏิบัติการจึงสร้างการต่อท่อคำสั่งขึ้นมาที่เรียกว่า "Piping" หรือ "Pipe"
อย่างที่เคยยกตัวอย่างในหลายๆ บทความว่า...การยิงคำสั่งออกไปที่แฟ้มข้อมูลก็ดี...หรือการเชื่อมต่อคำสั่งมารวมกันก็ดี...ผู้เขียนอาจจะยังไม่ได้อธิบายในส่วนนี้ละเอียดมากนัก...เพราะมันจะกลายเป็นบล็อกวิชาการ...ถ้าเราศึกษาอะไรสักอย่างโดยไม่มีแรงจูงใจ...บล็อกนี้...ยอดวิวคงยังไม่เยียบหมื่นอย่างทุกวันนี้...จึงเอาวิชาการหรืออะไรที่หนักสมองมาไว้เป็นช่วงๆ ให้ไม่รู้สึกเบื่อ แต่วันนี้...คุณเจอของหนักแน่
มาทำความเข้าใจอุปกรณ์ของ DOS ก่อนว่า...ถูกสงวนไว้ตั้งแต่ DOS ยุคโบราณ 7 อุปกรณ์ ดังนี้
1. Nul  อุปกรณ์ว่าง...หรือผลของคำสั่งไปยังความว่างเปล่า
2. Con อุปกรณ์จอภาพ...และหน้าจอ...
3. Prn  อุปกรณ์เครื่องพิมพ์...หรือส่งผลของคำสั่งพิมพ์ทางปริ้นท์เตอร์ตัวที่เป็น Default
4. Com(หมายเลข) อุปกรณ์ประเภทการสื่อสารแบบ พอตท์อนุกรม
5. Lpt(หมายเลข)  อุปกรณ์ประเภทการสื่อสารแบบ พอตท์ขนาน
6. Aux อุปกรณ์ แอกซิเลียรี่ (ผู้เขียนว่ามันต้องอยู่ในเครื่องยุคเก่า)
7. Clock$ อุปกรณ์ ระบบนาฬิกา
อุปกรณ์เหล่านี้...มันจะถูกจองไฟล์แฮนเิดิล...เพื่อไม่ให้ ใครก็ตามนำ Handle ส่วนนั้นไปใช้ได้ครับ...และจะถูกสงวนใช้ไว้แม้กระทั้งระบบปฏิบัติการวินโดวส์ทำงานแล้วก็ตาม...



คำสั่ง > อุปกรณ์
การยิงคำสั่งรูปแบบนี้...คือการส่งผลการทำงานของคำสั่ง DOS ไปยังอุปกรณ์ที่ว่ามาทั้ง 7 หรือ ไฟล์ข้อมูลก็ได้ครับ (ไฟล์ข้อมูลไม่ถือเป็นอุปกรณ์เพราะจะถูกอ้างอิง Handle ใหม่เสมอ)
เช่น
DIR > PRN ; ส่งผลคำสั่ง DIR ไปที่เครื่องพิมพ์
Echo Test Message>Readme.txt ; ส่งข้อความ Test Message ไปที่่แฟ้ม Readme.txt

คำสั่ง >> อุปกรณ์
การยิงคำสั่งรูปแบบนี้...คือการส่งผลการทำงานเหมือนตัวอย่างแรก เพียงแต่ไปป์ปิ้งตัวนี้จะส่งผลต่อท้ายอุปกรณ์หรือต่อเติมไฟล์ที่มีอยู่แล้ว(ไม่เขียนทับ) เพื่อให้เกิดการต่อเนื่องของผลลัพธ์นั้นเอง
เช่น
Echo Message Line 2 >>Readme.txt ; ส่งข้อความ ไปยังแฟ้ม Redme.txt อีกครั้งโดยอยู่บรรทัดที่ 2

คำสั่ง | คำสั่ง
การเชื่อมต่อคำสั่งนี้...คือการนำคำสั่ง 2 คำสั่งไปมารวมกันหรือมีผลลัพธ์เดียวกัน
่เช่น
Echo Y | del *.mp3 ; หมายถึง ตอบ Y เมื่อ คำสั่ง Delete ถามว่า Yes หรือ No
(ไปป์ปิ้งตัวนี้ค่อนข้างใช้งานยาก...แต่มันเป็นสุดยอดของ ไปป์ทั้งมวลเพราะมันทำให้เกิดผลคำสั่งที่ไม่น่าจะเป็นไปได้...นอกเสียจากบางคนจะหาวิธีใช้งานและประยุกต์ใช้และเผยแพร่ให้ได้รู้นั้นเอง)

คำสั่ง < อุปกรณ์ 
การรับคำสั่งนี้...ส่วนมากเป็นการรับแฟ้มข้อมูลเข้ามายั้งผลของคำสั่ง 
เช่ืน
Debug.exe < Script.txt
FTP.exe < Script.txt
TelNet.exe < Script.txt

คำสั่ง & คำสั่ง
คือการนำบรรทัดคำสั่งมา้เชื่อมไว้ในบรรทัดเดียวกันเช่น
Echo Line1 & Echo Line2

คำสั่ง && คำสั่ง
คือการทำงานเกี่ยวกับ Errorlevel (ย้อนกลับไปดู IF Errorlevel) คำสั่งนี้จะคล้าย IF ERRORLEVEL เพียงแต่คำสั่งจะสั้นลงมาเท่านั้น
เช่น
Findstr "Text" readme.txt && Msg %username% พบข้อความใน Redme.txt

คำสั่ง || คำสั่ง
คือการทำงานเกี่ยวกับ Errorlevel เช่นกัน เพียงแต่เทียบได้กับคำสั่ง IF NOT ERRORLEVEL
เช่น
Findstr "Text" Redme.txt || Msg %username% ไม่พบข้อความใน Readme.txt

คำสั่ง > แฟ้มข้อมูล >&1
คำสั่ง > แฟ้มข้อมูล >&2
ไปป์ตัึวนี้...แสดงถึงการส่งผลของคำสั่งไปยังแฟ้มที่ต้องการและแฟ้มนั้นจะถูกจอง ไฟล์แฮนเดิลหมายเลขที่กำหนดได้เพื่อประโยชน์ในการใช้งานครั้งต่อไปคล้าย VB6
เช่น
Dir *.mp3 /s >ชื่อเพลง.txt >&1
มีค่าเท่ากับ
Open ชื่อเพลง.txt for input as #1
  ...
Close #1
เพียงแต่ แฮนเดิลที่ถูกจองนี้จะถูกปิดหลังจากจบเซกชั้น นั้นเอง

ไม่มีความคิดเห็น:

แสดงความคิดเห็น