Jump to content

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


Recommended Posts

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

 

Edited by AlexD
Link to post

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
Link to post

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 to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...