Aus QBasic zu Batch

Du hast eine Frage aber bist neu im Thema?
Antworten
ioiCracr

Aus QBasic zu Batch

Beitrag von ioiCracr »

Hi,
hab jetzt einen winziges Prog in QBasic geschrieben, das mir meine Anforderung die ich im Thread, Variablen-Problem, erwähnt habe, löst! :D

Ich rufe aus der laufenden .bat die mit QBasic erstellte .exe auf.
In dieser wird die IP zufällig generiert. dann rufe ich eine weitere .bat auf in der ich die IP in meine .ini eintragen muß.
Jetzt muß ich aber die IP die in Form einer Variable vorliegt in das aufgerufene .bat bekommen...
Wie stelle ich das jetzt an, die Variable von der .bat aus aufzurufen oder zu übergeben:?:

muß ich das irgendwie mit output machen?
hab da ein bisschen rumprobiert, aber das läuft irgendwie nicht
:cry:
Benutzeravatar
CptKlotz
Admin a.D.
Beiträge: 2947
Registriert: Mo 7. Mär 2005, 23:36
Wohnort: Dorsten
Kontaktdaten:

Beitrag von CptKlotz »

Hallo ioCracr,

Ich verstehe davon nicht genug, daß ich da einen kompletten Lösungsansatz bieten kann.

Hast Du denn wenigstens mal über das nachgedacht, was ich schon zu Anfang geschrieben hatte, daß eine Zufallsgenerierung keine Konflikte ausschließt? Zufall ist Zufall und nicht "es werden schon verschiedene IPs generiert werden". Du kannst auch zufällig einen Konflikt bekommen.

Wir haben durchaus erfahrenere Teilnehmer als mich hier, die eine Lösung wissen könnten. Aber selbst die werden, so fürchte ich, aus Deinen sehr sehr vagen Beschreibungen nicht ganz schlau werden. Wir generieren irgendwas in QBASIC, rufen das aus einer .BAT aus und schreiben etwas in eine .INI . Irgendwie mit Output, damit im "Quellcode" keine gleichen IPs stehen.
Sorry, werde ich nicht schlau draus...

Was ich nicht verstehe, ist, warum Du jetzt noch einen Thread öffnen mußtest. Warum bleibst Du nicht in Deinem Thread? Wenn jemand eine Lösung weiß und sie mit Dir teilen möchte, wird er das schon tun. Wenn nicht, hilft auch der zweite Thread nicht.

Bitte bleibe also mit diesem Thema in Deinem bestehenden Thread. Zwei Threads zu einem Thema halte ich für äußerst unsinnig - alleine schon, weil dann jemand, der Dir helfen könnte ZWEI Threads parallel lesen muß. Und der zweite Thread ist ja ohne den ersten erst recht nicht verständlich.


Gruß,
Stephan
“It is impossible to defeat an ignorant man in argument.” (William G. McAdoo)
ioiCracr

Beitrag von ioiCracr »

also ich glaub bevor ich nicht jemanden finde der mich versteht, bzw. ein bisschen erfahrung mit QBasic und Batch-Dateien hat poste ich gar nichts mehr :roll:
bttr

Beitrag von bttr »

Und wer hat da den Schaden? ... Also sei nicht bockig!
Benutzeravatar
CptKlotz
Admin a.D.
Beiträge: 2947
Registriert: Mo 7. Mär 2005, 23:36
Wohnort: Dorsten
Kontaktdaten:

Beitrag von CptKlotz »

@bttr:

So deutlich wollte ich das nicht sagen, aber... Recht hast Du!!

So wie ich das sehe, halten sich alle Leute hier im Forum freiwillig und aus Interesse auf.
Wir sind doch keine Support-Hotline. Die gibt es auch und da hat der Kunde dann Anspruch auf eine Leistung. Warum? Weil er bares Geld für den Support zahlt!

@ioiCracr: Wenn Du schon willst, daß wir deine Hausaufgaben machen, solltest Du wenigstens einmal konkret sagen, was Du erreichen möchtest.

-Ausgangssituation (Hardware, Software, Anwendungszweck)
-konkretes Problem
-Schritte, die zur Lösung probiert worden sind

Das alles bitte sauber beschrieben und strukturiert, damit es auch jemand versteht. Wenn Du dir nicht die Mühe machen kannst, Dein Problem genau zu beschreiben, warum sollen dann erfahrene Leute wie bttr sich die Mühe machen, Dir die Einzelheiten aus der Nase zu ziehen?
Klingt vielleicht hart, ist aber so... Denk' mal drüber nach!

Weil's gerade so schön zum Thema paßt: Ein Artikel von Eric S. Raymond:

http://www.lugbz.org/documents/smart-questions_de.html (deutsche Übersetzung)

haben fertig!
“It is impossible to defeat an ignorant man in argument.” (William G. McAdoo)
ioiCracr

Beitrag von ioiCracr »

Es handelt sich hierbei um ganz normale übliche Rechner mit Win2000Professional Betriebssystem.



NOCHMAL zum Sachverhalt:
Es geht um eine Autoinstallation von Rechnern in einer Stadtverwaltun die mehr als fünf Rechner besitzt! (zwölf Etagen, á ca 50 Rechner)
Der Typ der für den Support zuständig ist, hat aber keine Lust bei jeder Neuinstallation mit einem Haufen CD´s rumzulaufen und die nacheinander zu installieren...
Drum hat er sich eine Autinstallation programmiert, die alle benötigte Software vom Server aus installiert...
In dieser AutoInstall wird unter anderem eine 'Protokoll.ini' ausgeführt in der auch eine IP dem aktuell zu installierendem Rechner zugewiesen wird. So weit läuft alles nach Plan, wenn jetzt aber ein Rechner installiert wird, und irgendwo im Netzwerk ein zweiter Rechner oder nochmehr installiert werden wollen, geht das nicht weil jedem zu installierendem Rechner durch diese Protokoll.ini die gleiche IP zugewiesen wird. DAHER IP-KONFLIKT!!!
Jetzt sind wir bei meiner Aufgabe angekomen:
Ich soll jetzt dieses Problem lösen indem ich einen Ausweg finde diese konstante IP so zu generieren, das der letzte 255er - Block von Zufällig generierten Zahlen ersetzt wird, damit die Chance für den IP -Konflikt 255 mal kleiner, und damit unwahrscheinlicher wird!

Ist das soweit verstanden :?: Wenn ja bitte bescheid geben. dann kann ich meine Lage weiter schildern...
bttr

Beitrag von bttr »

Wir wollen http://www.chiark.greenend.org.uk/~sgta ... gs-de.html vom NASM-"Erfinder" Simon Tatham nicht vergessen! 8)

Nimm's nicht persönlich, aber hat der "Experte" dort schon mal was von automatischer Adreßverteilung über DHCP gehört? Bei 50 PCs die IPs von Hand zu managen ist doch Schwachsinn!

Und bei lediglich 255 Möglichkeiten ist die Chance riesig, daß der Zufallszahlengenerator häufig die selbe IP generiert.
ioiCracr

Beitrag von ioiCracr »

Ich nehm´s schon nicht persönlich, und der Admin hat glaub ich schonmal was von DHCP gehört!!!
ABER...
...aus welchem Grund auch immer, ist das mit DHCP nicht lösbar.
Deshalb die 'Not-Lösung'.
Da aber nicht gerade jeden Tag 50 Rechner installiert werden müssen reicht das vollkommen aus.Außerdem werden die IPs ja nciht per Hand eingegeben, sondern von .bat dateien automatisch zugewiesen...
Im übrigen arbeitet Randomize mit dem Timer, von daher reicht die Generierung denke ich schon aus... :D
bttr

Beitrag von bttr »

Den Grund, der gegen DHCP spricht, würde ich gern erfahren! Ihr werdet doch wohl irgendwo einen DHCP-Server stehen haben. Gibt's für *BSD, Linux, UNIX und selbst seit Windows NT 4.0 Server ist er mit drin. Selbst bei nur 3-5 PCs setzen wir in Netzwerken DHCP ein.

Natürlich arbeitet Randomize mit dem Timer. Wie willst du sonst bei einer Maschine, die nur 0 und 1 kennt, etwas zufälliges erzeugen? Aber es werden eben nur Pseudozufallszahlen erzeugt.

Hier mal der Quellcode für ein Turbo Pascal-Programm, das die Häufigkeit der Zufallszahlen 0 bis 255 bei 50 Durchläufen (PCs) ermittelt. Ich habe damit immer zwischen 2 und 8 Konflikten! Und behaupte jetzt bitte nicht, daß das an TP liegt!

Code: Alles auswählen

{ Entferne '.' um Algorithmus 2 zu aktivieren }
{.$DEFINE ALGO2}

const
  ANZAHL_PCS = 50;

var
  zufallszahlen: array[0..255] of Longint;
  i: Byte;
  konflikte: Longint;

begin
{ setze Häufigkeit der Zufallszahlen auf 0 }
  FillChar(zufallszahlen, SizeOf(zufallszahlen), 0);

{ initialisiere Zufallszahlengenerator }
  Randomize;

{ generiere 256 Zufallszahlen und speichere ihre Häufigkeit }
  for i := 1 to ANZAHL_PCS do
  begin
  {$IFDEF ALGO2}
    Randomize;
  {$ENDIF}
    Inc(zufallszahlen[Random(256)]);
  end;

{ gib alle mehr als 1x vorkommenden Zahlen aus }
  konflikte := 0;
  WriteLn('Mehrfach vorkommende Zufallszahlen:'^M^J);
  for i := 0 to 255 do
    if zufallszahlen[i] > 1 then
    begin
      WriteLn(i:3, ' wurde ', zufallszahlen[i], ' generiert.');
      Inc(konflikte, zufallszahlen[i]);
    end;

{ gib Anzahl der Konflikte aus }
  if konflikte > 0 then
    WriteLn(^M^J'Wir haben ', konflikte, ' Konflikte!'^M^J)
  else
    WriteLn(^M^J'Hurra! Wir hatten keinerlei Konflikte!'^M^J);
end.
ioiCracr

Beitrag von ioiCracr »

Das mag ja schon sein, das es keine 100%ige Lösung ist, aber es reicht(fürs erste... :D )

Mal ein ganz anderes Problem...
Kannst mir erklären wie ich von einer Batch-Datei einen String in einer Variable an eine .exe weiergebe kann?
Benutzeravatar
Jinsu
MemMaker-Benutzer
Beiträge: 79
Registriert: Di 8. Mär 2005, 11:14
Wohnort: NRW
Kontaktdaten:

Beitrag von Jinsu »

Der String müsste einfach als Parameter an die .exe-Datei weitergegeben, wie es so üblich ist. Allerdings muss die .exe-Datei auch fähig sein, diesen Parameter zu verarbeiten. Wenn das nicht einprogrammiert wurde, dann ist es nicht möglich.

D.h. Wenn du in deiner Batch-Datei einen String in einer Variable definiert hast, muss es auch möglich sein, dieses String einfach hinter den Aufruf der .exe zu setzen.

Ist zumindest meine Annahme.

Läuft dann so ab:

meinprog.exe %VARIABLE% oder meinprog.exe /S:%VARIABLE% etc...

Je nachdem, wie das läuft.
Benutzeravatar
Dekay
Kommandozeilenfetischist
Beiträge: 166
Registriert: Mi 15. Jun 2005, 09:32
Wohnort: München

Beitrag von Dekay »

Also, ehrlich gesagt, verstehe ich die Anforderung für die Zufalligkeit
überhaupt nicht. Ich würde die IP einfach immer + 1 hernehmen, aber
gut, wenns denn sein muss. Trotzdem würde ich dann eher ein File
erstellen, das meinetwegen zufällig sortiert, Nummern zwischen 1 und 255
enhält. Diese Liste würde ich auf den Server legen und immer die erste
Zeile ausschneiden, die Nummer hernehmen und den Rest der Liste wieder abspeichern.
Ist das ne Idee?

Gruß

dominik
Antworten