Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch setlocal enabledelayedextension scheint nicht zu funktionieren

Frage Entwicklung Batch & Shell

Mitglied: JKoenig

JKoenig (Level 1) - Jetzt verbinden

18.01.2012, aktualisiert 19:05 Uhr, 3191 Aufrufe, 4 Kommentare

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)
01.
@echo off 
02.
setlocal enabledelayedextension 
03.
echo INSERT INTO `tb_class` (`ID`, `Name`, `InheritanceID`, `Desc`) VALUES>mcp.sql 
04.
set /a i=0 
05.
echo %i% 
06.
for /F %%A in (_classes.txt) do ( 
07.
	set /a i += 1 
08.
	echo %i% 
09.
	echo ^(%i%, '%%A', 0, ''^),>>mcp.sql 
10.
11.
echo %i% 
12.
pause
Kann mir jemand sagen wo genau da mein Fehler ist?

[Edit Biber] Codeformatierung [/Edit]
Mitglied: Biber
18.01.2012 um 19:31 Uhr
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
Bitte warten ..
Mitglied: JKoenig
18.01.2012 um 20:03 Uhr
Ok funktioniert jetzt

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

Grüße

JKoenig
Bitte warten ..
Mitglied: pieh-ejdsch
18.01.2012 um 20:24 Uhr
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.

Setlocal und rem sind aber die Blinden Kandidaten im CMD-Fenster, etwa so wie: echo(nix >nul
01.
>echo setlocal enabledelayedextensions >ab.cmd &&ab ||echo Fehler! &del ab.cmd 
02.
 
03.
>setlocal enabledelayedextensions 
04.
Ungültiger Parameter für den SETLOCAL-Befehl. 
05.
Fehler!
Hoffentlich kommt Timo net mit der @ECHO OFF Keule vorbeigeschwungen.

Gruß Phil
Bitte warten ..
Mitglied: Biber
18.01.2012 um 20:56 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (9)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...