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

Geschrieben (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.: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
Geschrieben

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

 

  • Like 1
Geschrieben

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:

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

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...