Προς το περιεχόμενο

bat files


Dvs

Προτεινόμενες αναρτήσεις

(Οχι! Πρέπει να χρησιμοποιήσεις ένα πρόγραμμα το οποίο θα επιστρέφει τιμή εξόδου την οποία και θα εκμεταλλευτείς δια του ERRORLEVEL.)<p>----<p>ΕΚΤΟΣ και αν εννοείς ότι θα έχεις προ-επιλέξει εσύ τους αριθμούς που θα εμφανίζονται οπότε ο χρήστης θα επιλέγει έναν αριθμό εξ αυτών οπότε μπορείς να χρησιμοποιήσεις την εντολή choice (πάντως αν θες random αριθμούς χρειάζεσαι extra λογισμικό).<p>πχ. choice /c:12345 όπου θα σου δώσει ενα output

του στυλ [1,2,3,4,5]? όπου κάθε επιλογή θα

αντιστοιχεί στην ανάλογη ERRORLEVEL !<p>(Sorry για το πρώτο POST νόμιζα οτι ήθελες κάτι διαφορετικό !!)<p>[ 08-01-2002: Το μήνυμα επεξεργάστηκε από: Directx ]<p>[ 08-01-2002: Το μήνυμα επεξεργάστηκε από: Directx ]<p>[ 08-01-2002: Το μήνυμα επεξεργάστηκε από: Directx ]</p>

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δυστυχώς τα αρχεία BAT είναι εξαιρετικά απλά οπότε το μόνο που θα μπορούσες να κάνεις είναι να χρησιμοποιήσεις μια εξωτερική εφαρμογή που θα επιστρέφει έναν τέτοιο τυχαίο αριθμό τον οποίο και θα εκμεταλλεύεσαι δια της ERRORLEVEL προσαρμόζοντας ανάλογα την λειτουργία του BAT script.<p>Για παράδειγμα (έστω ότι διαθέτεις ένα τέτοιο πρόγραμμα RAND.EXE) που δίνει αριθμούς από το 1..5 θα μπορούσες να έκανες:<p>@echo off

RAND

IF ERRORLEVEL 1 GOTO A

IF ERRORLEVEL 2 GOTO B

IF ERRORLEVEL 3 GOTO C

ECHO Unknown random value !

GOTO END

:A

ECHO This is A

GOTO END

:B

ECHO This is B

GOTO END

:C

ECHO This is C

GOTO END

:END

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Από ότι φαίνεται δεν έγινα κατανοητός Το παράδειγμα που σου έστειλα χρειάζεται ένα εκτελέσιμο γραμμένο σε κάποια γλώσσα υψηλού ή χαμηλού επιπέδου που να επιστρέφει στην έξοδο του έναν τυχαίο αριθμό (κατάλληλα κωδικοποιημένο για την ERRORLEVEL) ..αν δεν υπάρχει ένα τέτοιο εκτελέσιμο φυσικά και ο άνωθεν κώδικας δεν θα δουλέψει!<p>Δυστυχώς το DOS δεν δίνει έτοιμο ένα τέτοιο λογισμικό (από όσο γνωρίζω) οπότε πρέπει να γραφτεί από τρίτους. <p>Για να έχεις αποτέλεσμα λοιπόν θα πρέπει να κατασκευάσεις εσύ το RAND.EXE (στην περίπτωση του παραδείγματος μου) έτσι ώστε να επιστρέφει στην μεταβλητή ERRORLEVEL του DOS τις τιμές που επιθυμείς (τυχαίες ή μη).<p>Ελπίζω να σε κατατόπισα<p>* Για τα εισαγωγικά έχεις απόλυτο δίκιο (τα τοποθέτησα εκ παραδρομής :-)<p>Good Luck

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Παρακάτω στέλλω ένα source & bat test το οποίο επιδεικνύει πώς να φτιάξεις μια τέτοια εφαρμογή και να την εκμεταλλευτείς μέσο BATCH & ERRORLEVEL<p>Ελπίζω να σου λύθηκαν όλες οι απορίες (καλούς πειραματισμούς) ;-)<p>***<p>Αρχείο: BATRAND.C<p>// RAND FOR DOS BATCHES BY DIRECTX

// TO BE COMPILED WITH MS-C 6.0<p>#include <stdio.h>

#include <stdlib.h>

#include <time.h><p>int iMax,iMin,iRandGenerated;<p>// MAKEWORD MACRO (RIPPED BY W32SDK)

#define MAKEWORD(a, B) \

((int) (((unsigned char) (a)) | ((int) ((unsigned char) (B))) << 8))<p>void main(int argc,char *argv[])

{

printf("RAND FOR DOS BATCHES BY DIRECTX\n");<p> if(argc==1 || argc<3 || argc>3)

{

printf(" Usage: RAND [Min] [Max] value\n");

return;

}<p> iMin=atoi(argv[1]);

iMax=atoi(argv[2]);<p> //printf("IMAX: %d \n IMIN:%d\n",iMax,iMin);<p> if(iMax>=254 || iMin>=254)

{

printf(" ERROR: Min or Max cannot be more than 254 ! (Min:%d ~ Max:%d)\n",

iMin,iMax);

return;

}<p> if(iMax==iMin)

{

printf(" ERROR: Min and Max cannot be the same ! (Min:%d ~ Max:%d)\n",

iMin,iMax);

return;

}<p> if(iMax<iMin)

{

printf(" ERROR: Min number cannot be greater than Max ! - %d > %d\n",

iMax,iMin);

return;

}<p> srand( (unsigned) time(NULL) );<p> for(; wink.gif" border="0

{

iRandGenerated=rand() % iMax;

if(iRandGenerated<=iMax & iRandGenerated>=iMin)

{

break;

}

}<p> printf("Rand value:%d\n",iRandGenerated);<p> exit(MAKEWORD(iRandGenerated,0)); // ERRORLEVEL Checks the returned LOWORD numeric!

}<p>----<p>Αρχείο: RTEST.BAT<p>@ECHO OFF<p>REM BATRAND TEST BATCH FILE [C] BY DIRECTX.<p>IF NOT EXIST BATRAND.EXE GOTO FILE_NOT_FOUND<p>REM CALL THE BATRAND EXECUTABLE (TO HIDE BANNER RECOMPILE)<p>BATRAND 1 5<p>

REM ERRORLEVEL CONDITIONAL CHECKS SHOULD BE REVERSED ( wink.gif" border="0 <p>IF ERRORLEVEL 5 GOTO E

IF ERRORLEVEL 4 GOTO D

IF ERRORLEVEL 3 GOTO C

IF ERRORLEVEL 2 GOTO B

IF ERRORLEVEL 1 GOTO A<p>ECHO UNKNOWN RETURN VALUE !<p>GOTO END<p>:FILE_NOT_FOUND

ECHO FILE BATRAND.EXE NOT FOUND !

GOTO END<p>:A

ECHO NUMBER 1 GENERATED

GOTO END<p>:B

ECHO NUMBER 2 GENERATED

GOTO END<p>:C

ECHO NUMBER 3 GENERATED

GOTO END<p> grin.gif" border="0

ECHO NUMBER 4 GENERATED

GOTO END<p>:E

ECHO NUMBER 5 GENERATED<p>:END

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Είναι C . Το κόλπο με την ERRORLEVEL είναι ότι ελέγχει το αποτέλεσμα της εξόδου της εφαρμογής σε LOWORD (πράγμα που δεν κάνει αυτόματα η exit της MS-C 6 τουλάχιστον), από εκεί και πέρα δεν υπάρχει πρόβλημα!<p>(για BASIC δεν έχω ιδέα :-)<p>Ελπίζω να πάνε όλα καλά.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...