Jump to content

Batch If-Anweisung in For-Schleife wird nicht ausgeführt


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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.:cry3:

 

@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 von AlexD
Link zu diesem Kommentar

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

 

Link zu diesem Kommentar

Hallo Nils,

 

vielen Dank für den Stups und die Lösung meines Problems!! :thumb1:

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.:grins1:

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...