עבור לתוכן

בעיה עם כמה משפטי IF בקובץ batch

Featured Replies

פורסם

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

אני עושה את זה בשביל אירגון מאוד קטן ועני לכן החלטתי לבצע את ההתקנות דרך SMB (על שרת SAMBA ).

השתמשתי ב net boot disk ליצור דיסקט הפעלה עם סקריפט שעושה mount ל smb share

שבה קבצי ההתקנה נמצאים ככונן X ומריץ את menu.bat שאמור להציג תפריט,

לקלוט ערך מהמשתמש ולהריץ את תוכנית ההתקנה עם הפרמטרים המתאמים.

יש לי 0 נסיון בכתיבת קבצי batch , אז אני מהבוקר כבר מנסה לבנות את הסקריפט האומלל הזה!

עד כמה שהבנתי הדרך היחידה לקבל קלט מהמשתמש זה בעזרת תוכנה בשם choice.exe,

לא מצאתי אותה בXP אז כתבתי אחת משלי.

הבעיה היא בכמה משפטי IF שבודקים את ERRORLEVEL ש choice מחזירה ומשתמשים

ב goto בשביל לקפוץ לקטע המתאים, וזה משום מה לא עובד לי...

זה נראה שה IF הראשון תמיד אמת, לא משנה מה choice מחזירה כל עוד זה לא 0.

זה הסקריפט:

@echo off
color 02


:MENU

cls

echo --------------------------------------------------------------
echo OS installation script V.0.01
echo --------------------------------------------------------------
echo.
echo.
echo.
echo 1 . Windows XP PRO SP2 - Hebrew.
echo 2 . Windows XP PRO SP2 - English.
echo 3 . Windows XP PRO SP2 - Hebrew , Fully unattended.
echo 4 . Windows XP PRO SP2 - English ,Fully unattended.
echo 5 . Reboot.
echo 6 . Exit.
echo.
echo.
echo Please choose a menu option:



"CHOICE.exe" 123456



IF ERRORLEVEL == 1 GOTO OP1

IF ERRORLEVEL == 2 GOTO OP2

IF ERRORLEVEL == 3 GOTO OP3

IF ERRORLEVEL == 4 GOTO OP4

IF ERRORLEVEL == 5 GOTO OP5

IF ERRORLEVEL == 6 GOTO END




IF ERRORLEVEL == 0 GOTO MENU





:OP1
echo.
echo OP1...
GOTO END


:OP2
echo.
echo OP2...
GOTO END

:OP3
echo.
echo OP3...
GOTO END

:OP4
echo.
echo OP4...
GOTO END

:OP5
echo.
echo OP5...
GOTO END





:END
echo.
echo Exiting...



pause

וזה הגירסה שלי ל CHOICE

/*
/ Quick and dirty replacement for CHOICE.EXE.
/
/ 12:41 @ 15/06/2007
/ V.0.01
/
/
/
*/


#include <stdio.h>
#include <ctype.h>

int main(int argc, char *argv[])
{
// short cs = 1; /* Case Sensitive */
// int time_out = 0; /* (If time_out > 0) Time out in seconds */

char usr_input;
int x;

if ( argc != 2 || strlen (argv[1]) == 0 )
return 255; /* wrong usage */

fflush (stdin);
usr_input = getchar();


for ( x = 0; argv[1][x] != '\0'; x++ )
if ( toupper (argv[1][x]) == toupper (usr_input) )
return x+1; /* Found! */



return 0; /* Bad user input */

}

פורסם

אני לא חושב שצריכים להיות סימניי שוויון בכלל.

תנסה לפי הסינטקס פה:

http://www.robvanderwoude.com/errorlevel.html

פורסם

@echo off
color 02


:MENU

cls


ECHO --------------------------------------------------------------
echo OS installation script V.0.01
echo --------------------------------------------------------------

ECHO.
echo 1 . Windows XP PRO SP2 - Hebrew.
echo 2 . Windows XP PRO SP2 - English.
echo 3 . Windows XP PRO SP2 - Hebrew , Fully unattended.
echo 4 . Windows XP PRO SP2 - English ,Fully unattended.
echo 5 . Reboot.
echo 6 . Exit.

ECHO.
ECHO.
set choice=
set /p choice=Please choose a menu option:
if not '%choice%'=='' set choice=%choice:~0,1%
if '%choice%'=='1' GOTO OP1
if '%choice%'=='2' GOTO OP2
if '%choice%'=='3' GOTO OP3
if '%choice%'=='4' GOTO OP4
if '%choice%'=='5' GOTO OP5
if '%choice%'=='6' GOTO END
ECHO "%choice%" is not valid please try again
ECHO.
goto MENU

אני מקווה שעזר לך , תתחיל לפי זה

פורסם
  • מחבר

הרגע בדקתי את זה, זה עובד מצויין!

תודה!

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים