AlexD 10 Posted March 7 Report Share Posted March 7 (edited) 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 Edited March 8 by AlexD Quote Link to post
NilsK 1,226 Posted March 8 Report Share Posted March 8 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 Quote Link to post
MurdocX 246 Posted March 8 Report Share Posted March 8 Falls er/sie sich mit Powershell probieren sollte, stehen wir gerne für eine Unterstützung bereit Quote Link to post
AlexD 10 Posted March 8 Author Report Share Posted March 8 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. Quote Link to post
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.