AlexD 10 Geschrieben 7. März 2021 Melden Teilen Geschrieben 7. März 2021 (bearbeitet) Hallo zusammen, in Sachen Batch bin ich echt nicht sehr bewandert, darum hab ich hier ein Anfänger-Problem mit einer If-Anweisung die nicht ausgeführt werden will. Wohl eher ein Variablen-Problem/Fehler. Ablauf: ich extrahiere die mysql-Tabellen aus einem Backup in den Import-Ordner, die nacheinander durchlaufen werden und man eben mit j oder n nochmals bestätigen soll ob diese Tabelle wirklich zurückgespielt werden soll. Bisher musste ich noch kein Backup zurückspielen, aber da ich jetzt einen neuen MySQL aufgesetzt habe (von 5,7 -> 8) muss ich die Datenbanken wieder einspielen. Das Verzeichnis wird wie gewünscht durchlaufen und zeigt mir alle Tabellen an... nur der IF-Teil funktioniert nicht. Ich mach mehr in PHP und Schleifen sowie IF/ELSE sind mir durchaus bekannt, bei Batch schleuderts mich allerdings immer wieder. @echo off setlocal enableDelayedExpansion set DATUM=%date% ECHO Datenimport am %date% for %%b in (c:\db_import\*.sql) do ( set /p wahl=Tabelle %%b importieren? [j/n]: echo ausgewaehlt: !wahl! <-- zeigt j oder n echo ausgewaehlt: %wahl% if /i !wahl! == 'j' ( ECHO Tabelle %%b wurde importiert ) set wahl= ) pause bearbeitet 8. März 2021 von AlexD Zitieren Link zu diesem Kommentar
NilsK 2.957 Geschrieben 8. März 2021 Melden Teilen Geschrieben 8. März 2021 Moin, es werden mehrere Leute darauf anspringen, die dir sagen, dass Batch kein guter Ansatz dafür ist. Ist es auch nicht. Mach sowas künftig lieber per PowerShell. Die Hürde mit der Local Expansion hat dein Skript schon korrekt genommen. Nun ist aber noch der Vergleich selbst "falsch", weil du ihn so geschrieben hast, wie man das in einer ordentlichen Sprache tun würde. Das ist Batch aber nun mal nicht. Dein Vergleich lautet: vor 11 Stunden schrieb AlexD: if /i !wahl! == 'j' ( Das ist dann wahr, wenn in der Variablen "Wahl" der Wert "'j'" steht - beachte die Anführungsstriche. Batch nutzt an dieser Stelle keine Begrenzer. Der Vergleich müsste also lauten: if /i '!wahl!'=='j' ( Oder aber: if /i !wahl!==j ( Du vergleichst also entweder "Anführungsstriche Variable Anführungsstriche" mit "Anführungsstriche Wert Anführungsstriche" oder direkt "Variable" mit "Wert". Ja, das ist gruselig. Und ja, sieht man beides in der freien Wildbahn. Gruß, Nils 1 Zitieren Link zu diesem Kommentar
MurdocX 953 Geschrieben 8. März 2021 Melden Teilen Geschrieben 8. März 2021 Falls er/sie sich mit Powershell probieren sollte, stehen wir gerne für eine Unterstützung bereit Zitieren Link zu diesem Kommentar
AlexD 10 Geschrieben 8. März 2021 Autor Melden Teilen Geschrieben 8. März 2021 Hallo Nils, vielen Dank für den Stups und die Lösung meines Problems!! Kaum macht man bei Variable und Vergleichswert die Anführungszeichen, gehts auch! Ich muss zugeben, dass ich ne Zeit gebraucht hab um zu checken das die Variabale in der FOR-Schleife plötzlich !wahl! und nicht %wahl% ist. Hab viel porbiert und dabei wohl das mit den ' ' entsprechend übersehn. Das ist bei PHP doch schöner und irgendwie durchgängiger. Mach das alles ja nur Hobby in meiner Freizeit, und da komm ich mit Batch eher sehr selten in berührung. @MurdocX Vielen Dank für das Angebot, vllt. sollte ich mich in Zukunft wirklich mehr mit der PowerShell auseinandersetzten - da kommt dann sicher die Eine oder Andere Frage. 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.