לדלג לתוכן

1.5 באצ' סקריפט הרצאה

פרק זה מתבסס על כך שיש לכם ידע בסיסי בתכנות. שימו לב לעבור על קורס התכנות שלנו לפני שאתם ממשיכים בקורס זה.

קובץ Batch

  • קובץ Batch הוא קובץ טקסט שמכיל פקודות ש-Shell מריץ. הסיומת המקובלת לקובץ כזה היא .bat. כדי ליצור קובץ Batch, פתחו את Notepad וצרו קובץ חדש בשם script.bat. בתוכו נכתוב את הסקריפט הראשון שלנו.
  • כתבו את הסקריפט הבא:
@echo off
:: this is my script!
:: this program prints hello world!
set message=Hello World
echo %message%
  • בשורה הראשונה, הפקודה @echo off מבטלת את הדפסת הפקודות ב-Shell. ברירת המחדל היא שכל פקודה מריצה את עצמה ב-Shell, וזה יכול למלא את המסך במידע מיותר. כשמשתמשים ב-@echo off, רק הפלט הסופי יודפס.
  • השורות השנייה והשלישית הן הערות (comments). בשפת Batch ניתן להוסיף הערות בעזרת :: או Rem.
  • בשורה הרביעית אנחנו יוצרים משתנה בשם message ומאחסנים בו את הערך "Hello World" בעזרת הפקודה set.
  • בשורה האחרונה אנחנו מדפיסים את ערך המשתנה message בעזרת הפקודה echo

כדי להריץ את הסקריפט, שמרו את הקובץ ב-Notepad ואז הריצו אותו ב-Shell באמצעות הפקודה script.bat.
Pasted image 20240628191819.png

משתנים

  • סקריפטים ב-Batch יכולים לקבל ארגומנטים בזמן הריצה. אנחנו יכולים לגשת אליהם דרך המשתנים %1, %2, %3 וכן הלאה.
@echo off
echo %1
echo %2
echo %3
  • כשנריץ את הסקריפט ונספק לו ארגומנטים, הפלט יהיה בהתאם לארגומנטים שנעביר.
    Pasted image 20240628192229.png

  • כשאנחנו רוצים לשמור מספרים כמשתנים ולעשות איתם פעולות חשבוניות, נשתמש בדגל /A עם הפקודה set:

@echo off
SET /A a=5
SET /A b=10
SET /A c=%a% + %b%
echo %c%

הפקודה הזו מחברת את שני המספרים ומדפיסה את התוצאה (15).
Pasted image 20240628195023.png

תנאים

  • שפת Batch תומכת בתנאים (if ו-else), כך שנוכל לבצע פעולה מסוימת בהתאם לתנאים שמספקים:
@echo off
echo %1
echo %2
if %1%==2 (echo "The value is 2") else (echo "Unknown value")
if %2%==4 (echo "The value is 4") else (echo "Unknown value")

הקוד הזה בודק אם הערכים של המשתנים %1 ו-%2 שווים ל-2 ו-4 בהתאמה, ומדפיס פלט בהתאם.

לולאות

  • ב-Batch קיימת לולאת for, המאפשרת לנו לעבור על סדרה של ערכים. לדוגמה, אם נרצה לרוץ על סדרת מספרים, נוכל להשתמש בדגל /L:
@echo off
FOR /L %%G IN (1,1,5) DO echo %%G
  • אם נרצה לעבור על רשימות של מחרוזות, נוכל להשתמש בלולאת for גם עבורן:
FOR %%G IN (Sun Mon Tue Wed Thur Fri Sat) DO echo %%G

הקוד הזה מדפיס כל יום בשבוע.

  • דוגמה נוספת: יצירת 1000 עותקים של קובץ באמצעות לולאת for:
FOR /L %%G in (1,1,1000) DO copy SourceFile.txt NewFile%%G.txt

פיצ'ר: Delayed Expansion

  • ב-Batch יש תופעה מוזרה: כשאנחנו משנים ערכים של משתנים בתוך לולאות, לא תמיד נוכל לגשת לערכים המעודכנים. זה קורה משום ש-Batch לא תמיד מחדש את הערכים בזמן אמת.
  • כדי להתמודד עם הבעיה הזו, נשתמש ב-Delayed Expansion. כדי להפעיל את הפיצ'ר הזה, נכתוב את הפקודה setlocal EnableDelayedExpansion בתחילת הסקריפט. הנה דוגמה:
@echo off
setlocal EnableDelayedExpansion
:: count to 5 storing the results in a variable
set var=0
FOR /l %%G in (1,1,5) Do (
    echo !var!
    set /a var+=1
)
echo Total = %var%
  • כעת הפלט יהיה:
0
1
2
3
4
Total = 5

אז Batch זה לא משהו?

  • עברנו על הפיצ'רים העיקריים של Batch, אבל אם אתם מכירים שפות תכנות אחרות כמו Python, יכול להיות שתרגישו ש-Batch לא הכי נוח ומודרני.
  • נכון, Batch הוא שפת סקריפטים ישנה מאוד, וכיום יש לו חלופה טובה יותר בשם PowerShell, שהיא הרבה יותר גמישה ומודרנית. נלמד עליה בפרקים הבאים.
  • למרות ש-Batch מיושן, הוא עדיין נמצא כמעט בכל מערכת Windows ויש הרבה קוד Batch שצריך לדעת לקרוא ולהבין, במיוחד כשמתעסקים בניהול מערכות או שרתים מבוססי Windows.