לדלג לתוכן

מבוא לסקריפטים ב-Batch - היסודות שכל מנהל מערכות עדיין צריך

לפני שיש PowerShell, ולפני שיש אוטומציה מתוחכמת עם אובייקטים ו-pipeline, יש קובץ טקסט פשוט עם סיומת .bat, שממשיך לעבוד בכל מחשב ווינדוס בעולם בדיוק כמו שהוא עבד לפני עשרות שנים. זה סקריפט Batch, וגם היום, בעידן של כלים מתקדמים בהרבה, יש סיבות טובות ללמוד אותו.

למה בכלל ללמוד Batch כשיש פאוורשל

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

הפקודה הראשונה - קובץ bat פשוט

קובץ Batch הוא קובץ טקסט רגיל בשם something.bat, עם רצף פקודות שהיו רצות בדיוק כך בשורת cmd. הנה הדוגמה הכי בסיסית שיש:

@echo off
echo שלום עולם
pause

השורה הראשונה, @echo off, מונעת מהסקריפט להדפיס כל פקודה שהוא מריץ, כדי שהפלט יהיה נקי. echo מדפיס טקסט, ו-pause עוצר את הריצה ומחכה שתלחצו על מקש כדי לראות את הפלט לפני שהחלון נסגר.

משתנים ב-Batch

משתנים ב-Batch מוגדרים עם set, ונקראים עם סימני אחוז מסביב לשם:

@echo off
set name=אמית
echo שלום, %name%

זה נראה פחות אלגנטי מ-PowerShell, אבל זה עובד, ובעיקר - זה עובד בכל מחשב ווינדוס בלי יוצא מן הכלל.

תנאים - if

הפקודה if בודקת תנאי ומחליטה מה לעשות בהתאם:

@echo off
set /p age=מה הגיל שלך? 
if %age% GEQ 18 (
    echo אתם בגירים
) else (
    echo אתם קטינים
)

set /p מבקש קלט מהמשתמש ושומר אותו במשתנה. GEQ פירושה "גדול שווה" - Batch משתמש בקיצורים כאלה במקום סימנים כמו >=, וזה אחד הדברים שדורשים הסתגלות בהתחלה.

לולאות - for

לולאות ב-Batch נכתבות עם הפקודה for, שנראית קצת שונה מרוב השפות אבל עושה בדיוק את אותו דבר:

@echo off
for %%i in (1,2,3,4,5) do (
    echo מספר %%i
)

הסימן הכפול %%i נדרש בתוך קובץ סקריפט (בהרצה ישירה משורת הפקודה משתמשים בסימן בודד). זו אחת הפרטים הקטנים שתמיד תופסים מתחילים, ולכן חשוב לזכור אותה.

לולאה שימושית מאוד היא זו שעוברת על כל הקבצים בתיקייה:

@echo off
for %%f in (C:\Logs\*.log) do (
    echo נמצא קובץ - %%f
)

זה בדיוק סוג המשימה שסקריפטי Batch עדיין נמצאים בשימוש בשבילה - ניקוי תיקיות, גיבויים אוטומטיים, ותהליכים תחזוקתיים פשוטים שרצים כמשימה מתוזמנת.

מגבלות שכדאי להכיר מראש

Batch לא בנוי לעבוד עם נתונים מובנים - הכל שם הוא טקסט, ופעולות כמו עיבוד רשימות מורכבות, קריאת קבצי JSON, או עבודה עם אובייקטים, פשוט לא קיימות בו בצורה סבירה. גם הטיפול בשגיאות מוגבל מאוד לעומת שפות מודרניות. ברגע שסקריפט מתחיל לגדול ולהתמורכב, זה בדיוק הרגע לעבור ל-PowerShell, שנבנה מהיסוד כדי לפתור את המגבלות האלה.

הדרך הנכונה ללמוד את זה

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

ואם קטע קוד ב-Batch מסרב לעבוד לכם ואתם לא מבינים למה (ה-%% הזה תפס לא מעט אנשים), הצטרפו לקהילה בדיסקורד ותשאלו שם.