Gast Flipshot Geschrieben 2. Dezember 2004 Melden Teilen Geschrieben 2. Dezember 2004 Ich habe folgendes Batch-Script: If "%ErrorLevel%" == "0" ( If Exist "%LW_PC_Kunde%" ( Echo %Indent%EXEC: Net Use "%LW_PC_Kunde%" /Delete >> "%LogFile%" Net Use "%LW_PC_Kunde%" /Delete > Nul Echo %Indent%PARAMETER: ErrorLevel=%ErrorLevel% >> "%LogFile%" ) Echo Verbinde Laufwerk "%LW_PC_Kunde%" mit Freigabe "\\%H_LW_Server%\%H_LW%"... Echo %Indent%EXEC: Net Use "%LW_PC_Kunde%" "\\%H_LW_Server%\%H_LW%" >> "%LogFile%" Net Use "%LW_PC_Kunde%" "\\%H_LW_Server%\%H_LW%" > Nul Echo %Indent%PARAMETER: ErrorLevel=%ErrorLevel% >> "%LogFile%" ) Gehen wir davon aus, dass die Bedingung "%ErrorLevel%" == "0" immer erfüllt ist und die Verarbeitung des If-Blocks statt findet. Nun habe ich folgendes Problem, dass der If-Block If Exist "%LW_PC_Kunde%" ( Echo %Indent%EXEC: Net Use "%LW_PC_Kunde%" /Delete >> "%LogFile%" Net Use "%LW_PC_Kunde%" /Delete > Nul Echo %Indent%PARAMETER: ErrorLevel=%ErrorLevel% >> "%LogFile%" ) auf einigen NT-PCs nur ausgeführt wird, wenn das Laufwerk wirklich bereits verbunden ist. Es wird also getrennt und neu verbunden. Wenn das Laufwerk nicht existiert, dann es jedoch auch nicht neu verbunden, die Anweisung zum neu verbinden, nach dem If-Block werden irgendwie einfach ignoriert. Ich habe jetzt sowohl NT-PCs im Haus auf denen das einwandfrei funktioniert, und ich habe welche auf denen es absolut net funktioniert. Ich kann aber keinen Unterschied der PCs ausfindig machen. Weiss hierzu jemand Rat?! Zitieren Link zu diesem Kommentar
Dr.Lecter^ 10 Geschrieben 2. Dezember 2004 Melden Teilen Geschrieben 2. Dezember 2004 hi! also ich hab mal die echos weggetan... If %ErrorLevel% == "0" ( If Exist %LW_PC_Kunde% ( Net Use %LW_PC_Kunde% /Delete > Nul ) Net Use %LW_PC_Kunde% \\%H_LW_Server%\%H_LW% > Nul ) die ganzen anführungszeichen kannst du dir sparen....sind ja alles variablen und keine strings. so sollte es doch gehen oder? hast du das ganze noch in eine for schleife gepackt? oder woher nimmst du die hostnamen? oder du machst: If %ErrorLevel% == "0" goto netzlaufwerke :netzlaufwerke If Exist %LW_PC_Kunde% Net Use %LW_PC_Kunde% /Delete >Nul Net Use %LW_PC_Kunde% \\%H_LW_Server%\%H_LW% > Nul lg dani Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 2. Dezember 2004 Melden Teilen Geschrieben 2. Dezember 2004 Hallo, lasse die Prüfung einfach weg, trenne und verbinde neu! Gruß Edgar Zitieren Link zu diesem Kommentar
Finanzamt 76 Geschrieben 2. Dezember 2004 Melden Teilen Geschrieben 2. Dezember 2004 Moin Flipshot, das Script ist also komplett o.k., nur an manchen Workstations läuft es nicht. Ich denke, für Deine Echos und Checks hast Du gute Gründe. Das erinnert mich an ein Anmeldescript, das ich in Delphi geschrieben hatte, so richtig schön mit roter und grüner Ampel. Das Dingen lieft erst in dem Moment auf wirklich allen Kisten, als ich zwischen die einzelnen Abfragen (WinAPI) soviele Timerticks gesetzt habe, daß das Prog auf der schnellsten Kiste lief (Schnellste = die schnellste im Netz!) Setz doch mal zwischen Abfragen und NET USE - Befehle WAITs. Ich kann mir gut vorstellen, daß es dann auf allen Kisten läuft. [zu den Wait: Ich habe da zwei Progrämmchen im Einsatz WAIT x und SLEEP x ((x=Sekunden), weiß aber nicht mehr, wo ich die her habe] Ansonsten kenne ich bei solchen Scripten auch noch das Problem, daß WerWeißIch mal wieder irgend eine permanente Verbindung geschaffen hat. Unter diesem Aspekt ist "trenne alles" von lefg "Edgar" natürlich erste Wahl, weil es reinen Tisch macht. Ich sehe immer zu, einigermaßen Laufwerksbuchstaben-homogene Workstations im Netz zu haben, schreibe eine Batch aus lauter NET USE [Letter] / D > NUL und wandle sie mit Bat2Exec (ZiffDavis / PC-Mag - Utility) in eine .COM um, die ich dann zu Beginn des Scriptes aus \Netlogon$ aufrufe. Viel Erfolg! Zitieren Link zu diesem Kommentar
Gast Flipshot Geschrieben 2. Dezember 2004 Melden Teilen Geschrieben 2. Dezember 2004 Original geschrieben von Dr.Lecter^ die ganzen anführungszeichen kannst du dir sparen....sind ja alles variablen und keine strings. Ich setz nur sicherheitshalber Anführungszeichen drum rum. Könnt ja sein, dass mal jemand auf die Idee kommt und die Freigabe mit getrennten Wörtern schreibt. Original geschrieben von Dr.Lecter^ hast du das ganze noch in eine for schleife gepackt? oder woher nimmst du die hostnamen? Nein, es is keine Schleife drum rum. Die Variablen lass ich vorher setzen. Original geschrieben von Dr.Lecter^ oder du machst: If %ErrorLevel% == "0" goto netzlaufwerke :netzlaufwerke If Exist %LW_PC_Kunde% Net Use %LW_PC_Kunde% /Delete >Nul Net Use %LW_PC_Kunde% \\%H_LW_Server%\%H_LW% > Nul Von dieser Spaghetti-Programmierung will ich ja grad weg kommen! Zitieren Link zu diesem Kommentar
Gast Flipshot Geschrieben 2. Dezember 2004 Melden Teilen Geschrieben 2. Dezember 2004 Original geschrieben von lefg Hallo, lasse die Prüfung einfach weg, trenne und verbinde neu! Gruß Edgar Ist aber nicht sauber! Siehe Beitrag zur Spaghetti-Programmierung. Zitieren Link zu diesem Kommentar
Gast Flipshot Geschrieben 2. Dezember 2004 Melden Teilen Geschrieben 2. Dezember 2004 Original geschrieben von Finanzamt Ich denke, für Deine Echos und Checks hast Du gute Gründe. Ja, damit ich weiss was ausgeführt wird! Zitieren Link zu diesem Kommentar
dark knight 10 Geschrieben 2. Dezember 2004 Melden Teilen Geschrieben 2. Dezember 2004 If Exist "%LW_PC_Kunde%" ( Echo %Indent%EXEC: Net Use "%LW_PC_Kunde%" /Delete >> "%LogFile%") & (Net Use "%LW_PC_Kunde%" /Delete > Nul) & (Echo %Indent%PARAMETER: ErrorLevel=%ErrorLevel% >> "%LogFile%" ) Probiers mal so. Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 3. Dezember 2004 Melden Teilen Geschrieben 3. Dezember 2004 Original geschrieben von Flipshot Ist aber nicht sauber! Siehe Beitrag zur Spaghetti-Programmierung. Ich habe mich in meiner Programmierbegeisterung auch schon mal in solch ein Problem verbissen. Am Ende kam ich zu der Erkenntnis: Einfach ist manchmal besser. Bei einem Hobby spielt die Zeit meist eine untergeordnete Rolle, bei einem Kunden oder in einem Institut geht es um teure Arbeitszeit. Gruß Edgar Zitieren Link zu diesem Kommentar
Gast Flipshot Geschrieben 7. Dezember 2004 Melden Teilen Geschrieben 7. Dezember 2004 Wenn ich das Laufwerk immer erst löschen lass, dann bekomm ich eine Fehlermeldung, wenn das Laufwerk net existiert, die ich aber auch net unterdrücken kann. Es funktioniert mit dem neu verbinden dann zwar, die Fehlermeldung bringt aber die User durcheinander. Zitieren Link zu diesem Kommentar
Finanzamt 76 Geschrieben 7. Dezember 2004 Melden Teilen Geschrieben 7. Dezember 2004 Hi Flipshot! Probier mal von der Konsole aus das hier: if exist q:\.. echo Ist da oder if not exist q:\.. echo Ist sich nix mit q und setz entsprechend in das Script statt net use q: /d einfach if exist q:\.. net use q: /D > nul Leider klappt das bei NET USE LPT1 /D nicht. Aber bei den Laufwerken müßte es jetzt bei Dir im grünen Bereich sein. Gegrüßt! Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 8. Dezember 2004 Melden Teilen Geschrieben 8. Dezember 2004 Ein Tipp. http://www.bb-sys.de/bbshell.htm Umlenkung von Ein- und Ausgabe: BEFEHL > DATEI lenkt die Ausgabe auf eine angegebene Datei oder ein Standardgerät (LPT1, CON, PRN oder CONOUTS$) um. C:\DIR > DIR.TXT leitet das Inhaltsverzeichnis von C:\ in die Textdatei DIR.TXT. Dabei wird die Textdatei immer neu erstellt. C:\DIR >> DIR.TXT leitet das Inhaltsverzeichnis von C:\ an das Ende einer vorhandenen Textdatei DIR.TXT oder erstellt diese neu. BEFEHL < DATEI leitet die Daten aus einer Datei in eine Befehlseingabe um. BEFEHL 2> DATEI leitet Fehlermeldungen eines Befehls in die angegebene Datei um. BEFEHL > DATEI 2>&1 leitet die Ausgabe und die Fehlermeldungen in die gleiche Datei um. BEFEHL | BEFEHL leitet die Ausgabe eines Befehls in die Eingabe des nächsten Befehls (Pipe). C:\DIR | MORE leitet das Inhaltsverzeichnis in den MORE-Befehl zur seitenweise Anzeige Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 8. Dezember 2004 Melden Teilen Geschrieben 8. Dezember 2004 Unter Spaghetti-Programmierung verstanden wir früher die übermäßige Verwendung von GOTO in Basicprogrammen. Durch Verwendungen von GOSUB wurde eine Strukturierung möglich. Zitieren Link zu diesem Kommentar
Mensch 10 Geschrieben 8. Dezember 2004 Melden Teilen Geschrieben 8. Dezember 2004 Sorry dass ich hier so reinplatze. So wie es aussieht habt ihr ziemliche Ahnung davon. Daher meine Frage. Habt ihr mir einen Tipp oder Link wo man gute Tutorials zum Scripting von Batchdateien findet oder nachlesen kann? Danke und Gruß Andi Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 8. Dezember 2004 Melden Teilen Geschrieben 8. Dezember 2004 @Mensch http://www.bb-sys.de/bbshell.htm Es ist gegen die guten Sitten, einen Thread zu übernehmen. Ob ein Verstoß gegen die Forenrichtlinien vorliegt, überlasse ich den Moderatoren zu beurteilen. Gruß Edgar Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.