jkoenig
Goto Top

Batch setlocal enabledelayedextension scheint nicht zu funktionieren

Hallo und einen schönen Abend wünsche ich

ich bringe mir im moment etwas über PHP und MySQL bei und leider bleibe ich bei einer Batchdatei, welche mir ein Skript generieren soll um mir das manuelle Eintragen von ca 1000 Werten eine Datenbank abzunehmen.

Die Batchdatei funktioniert soweit, bis auf die Tatsache das die Variable %i% nicht in der Schleife inkrementiert wird.

Den Wert lasse ich mir während der Schleife und am Ende ausgeben, die Ausgabe sind jede Menge Nullen und am Ende eine 927 (Anzahl der Zeilen in der Datei)
@echo off
setlocal enabledelayedextension
echo INSERT INTO `tb_class` (`ID`, `Name`, `InheritanceID`, `Desc`) VALUES>mcp.sql
set /a i=0
echo %i%
for /F %%A in (_classes.txt) do (
	set /a i += 1
	echo %i%
	echo ^(%i%, '%%A', 0, ''^),>>mcp.sql  
)
echo %i%
pause
Kann mir jemand sagen wo genau da mein Fehler ist? face-sad

[Edit Biber] Codeformatierung [/Edit]

Content-Key: 179142

Url: https://administrator.de/contentid/179142

Printed on: April 16, 2024 at 06:04 o'clock

Member: Biber
Biber Jan 18, 2012 at 18:31:58 (UTC)
Goto Top
Moin JKoenig,

du hast zwar in der Zeile 02 mit setlocal enabledelayedextension etwas angekündigt, nämlich die Verzögerte Variablenaufdröselung.
Aber du hat an keiner Stelle die konkreten Lös-Mir-Verzögert-Auf-Signale bei einer Variable verwendet.
Verzögert aufgelöst werden soll doch die Variable %i%
---> diese muss dann in Zeile 08 und 09 als !i! geschrieben werden. (Ausrufezeichen statt Prozentzeichen).

Außerdem hast du per Zufall mal die Redmonder PraktikantInnen beim Qualitätscoden erwischt.

Dein unabsichtlicher Tippfehler "setlocal EnableDelayedExtension" statt richtig "setlocal EnableDelayedExpansion" bleibt vollkommen ohne sichtbare Fehlermeldung.

Eine kurzfristig durchgeführter Biberscher Qualitätscheck ergab
d:\temp>setlocal enabledelayedextension

d:\temp>setlocal WhateverYouWutt

d:\temp>setlocal WhateverYouWutt && echo Alles Prima
Alles Prima

--> Weder das eventuell vorstellbare Kauderwelsch "enabledelayedextension" noch das zweite Beispiel für ein unbekanntes Schlüsselwort bringen eine Fehlermeldung.
Wie in der letzten Zeile gezeigt nicht mal einen ERRORLEVEL-Wert für Fehler.
*kopfschüttel* Redmonder Coder sind schon was spezielles...

Grüße
Biber
Member: JKoenig
JKoenig Jan 18, 2012 at 19:03:57 (UTC)
Goto Top
Ok funktioniert jetzt face-smile

Mal wieder zwei Dinge gelernt,
1. !var! statt %var% bei delayedexPansion verwenden
2. auch Profies machen Fehler

Grüße

JKoenig
Member: pieh-ejdsch
pieh-ejdsch Jan 18, 2012 at 19:24:38 (UTC)
Goto Top
moin Biber,

du hast zwar in der Zeile 02 mit setlocal enabledelayedextension etwas angekündigt, nämlich die Verzögerte Variablenaufdröselung.
Der ist gut. face-big-smile

Setlocal und rem sind aber die Blinden Kandidaten im CMD-Fenster, etwa so wie: echo(nix >nul
>echo setlocal enabledelayedextensions >ab.cmd &&ab ||echo Fehler! &del ab.cmd

>setlocal enabledelayedextensions
Ungültiger Parameter für den SETLOCAL-Befehl.
Fehler!

Hoffentlich kommt Timo net mit der @echo OFF Keule vorbeigeschwungen.

Gruß Phil
Member: Biber
Biber Jan 18, 2012 at 19:56:25 (UTC)
Goto Top
Moin Phil,

hast ja recht... vielleicht sollte ich meine proofs of concept am CMD-Prompt nicht ausgerechnet auf den SETLOCAL-Befehl ausweiten.

Aber ehrlich... wenn ich so nebeneinanderhalte einerseits den Hilfetext von SETLOCAL...
....
Der SETLOCAL-Befehl legt einen ERRORLEVEL-Wert fest, wenn ein Argument
angegeben wird. Dieser ist 0, wenn eines der beiden gültigen
Argumente angegeben wird, und andernfalls 1.
.....

... und andererseits das Mir-doch-egal-Verhalten des SETLOCAL-Aufrufs in meinen Beispielen im letzten Kommentar...
-> Da musst du aber schon SEHR genau zwischen den Zeilen in der Doku lesen, um es so zu erwarten.

Aber vermutlich hatten die Jungs & Mädels auch Unterstützung von mehreren Volljuristen bei der Formulierung der Hilfetexte.

Danke dir für die Richtigstellung.

Grüße
Biber