שאלה מענינת של Scrypting Batch File

שאלה מענינת של Scrypting Batch File

לדוגמא ואני רוצה לאחזר איזשהו נתון ולעבוד עליו (לדוגמא לאחזר לתוך משתנה), איך עושים זאת? כל הפקודות שיש (Find, If), פשוט כולן, רק מציגות את הפלט על המסך, ולא כתוב כלום על איך משתמשים בנתון שמצאנו במקרה ואנחנו כותבים סקריפט. למישהו יש פיתרון?
 

annefan

New member
errorlevel

אני ממש מתנצל על חוסר בזמן, אבל חפש אתרים טובים על batch-files, ובתוכם חפש על errorlevel. (למרות שהפתרון האמיתי לסקריפטים הוא כמובן:
use perl;​
)
 
כל נסיון לעשות משהו מועיל עם BAT

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

KKnDoIt

New member
הערה ותשובה לשאלה:

לגבי מה שהעירו פה על הקושי וחוסר השימושיות של BATCH: ראשית, צריך להבדיך בין BATCH של command.com, שהיא השפה שנמצאת בדוס עד חלונות ME, לבין זו של cmd.exe, שנמצאת בחלונות NT ומעלה. השפה של CMD משוכללת בהרבה, וההבדל הוא קיצוני. עם זאת, שימוש ב- BATCH כדי לפתור משימות תכנותיות פשוט אינו משתלם: גם אם _אפשר_ לעשות זאת, מידת הזמן שאתה צריך להשקיע כדי ללמוד לעבודה איתה בלתי נסבלת, והיכולת להרחיב את הפרוייקט אפסית. דבר זה נובע משתי סיבות: 1. BATCH אינה שפה פרצדורלית: אין מחרוזות של ממש, אין טיפוסי נתונים, אין המרה בינהם, אין פונקציות לעיבוד מחרוזות, לא ניתן להגדיר פרוצדורות ופונקציות במובן המקובל של המילה, אין לולאות של ממש, אין תנאים של ממש (כי האופרטורים "או" ו- "וגם" לא קיימים בה) בנוסף, היא לא חופשית צורה: תווים לבנים הם תווים "תיכנותיים" לכל דבר, לא מתעלמים מתווים עודפים. 2. התיעוד עלוב. לדעתי 2 הוא פועל יוצא של 1: השפה כל כך לא ברורה, שגם במיקרוסופט לא משקיעים בה. היא פשוט עובדת בצורה שונה, ולא לטובה. כאן המקום להסתייג ולומר שיש משימות ש- BATCH (ביחוד של CMD) היא בחירה טובה עבורן, אך צריך להכיר הן את השפה והן את אופי המשימה כדי להבחין בכך. לדעתי, אם אתה לא מכיר את השפה הזו זה לא שווה את ההשקעה. אם אתה צריך ספת סקריפטינג, VBScript היא בחירה טובה. PERL ו- Python, שאותן אני לא מכיר, נחשבות לשפות הטובות ביותר שיש היום (תקנו אותי אם אני טועה). החיסרון היחיד שלהן היא שהמשתמש צריך להתקין פרשן, בעוד שעם VBScript הוא לא צריך לעשות זאת. עכשיו לשאלתך: לא ברור לי מה את רוצה לעשות בדיוק, ולכן אנחש. נניח שאתה רוצה לשמור את הפלט של התוכנית findstr בתוך משתנה. הקוד יראה כך (אתה יכול להריץ ולבדוק):
@echo off rem "Declaring" the variable. Just for clarity. set strResult= for /F "usebackq tokens=*" %%S in (`findstr "blabla" bla.txt`) do set strResult=%%S rem echo the content of the variable to the screen, to seee it's value: echo %strResult%​
דרך אגב, הסיבה שהשתמשתי ב- findstr ולא find היא ש- find מוציאה לפלט גם את שם הקובץ שהיא חיפשה בו, ואת זה אנו לא רוצים (אפשר להסתדר גם עם find, אבל זה יותר מסובך). תיעוד לפקודות של BATCH, ולשאר כלי שורת הפקודה של חלונות אתה יכול למצוא בעזרה של חלונות (מזער את כל התוכניות והקש F1). עשה חיפוש על command-line, והמשך משם.
 

KKnDoIt

New member
הערה קטנה:

למעשה, הקוד לא שומר את _כל_ הפלט, אלא רק את השורה האחרונה הלא ריקה של הפלט.
 
למעלה