cosmoh
Goto Top

WMIC Maximale Rekursionstiefe für SETLOCAL erreicht

Hallo wissende Gemeinde,

ich habe ein Problem, das ich leider weder durch Googeln noch durch Suche in den hiesigen Thread's lösen konnte.
Bis Dato habe ich die Informationen hier nur genutzt und bin auch den Erstellern und auch den Fragesteller sehr dankbar.

Ich habe ein kleines Batch File geschrieben, um Informationen zu speziellen USB Devicen auszulesen.
Das ganze hat auch sehr gut funktioniert. Beim Rumbasteln ist mir dann aufgefallen das man das ganze geschickter machen
kann und ich habe die Aufrufe geteilt in mehrere Batch Files.

Als ich dann das Batch aufgerufen habe, welches mit Hilfe von wmic die Device Informationen ausgelesen hat ist meine
Command Line "umgekippt" und gibt nach Aufruf irgendeines wmic Befehles immer das hier aus:

Maximale Rekursionstiefe für SETLOCAL erreicht.
Maximale Rekursionstiefe für SETLOCAL erreicht.
Maximale Rekursionstiefe für SETLOCAL erreicht.
Maximale Rekursionstiefe für SETLOCAL erreicht.
Maximale Rekursionstiefe für SETLOCAL erreicht.
^C^CSyntaxfehler.

Das ganze kann ich nur mit Ctrl-C abbrechen.
Ich habe da auch schon mit "EnableDelayedExpansion" rumgespielt, aber weder verstanden warum das helfen könnte,
noch was da bei mir schief läuft.

Auch interessant, in den Log Files die ich mit den Batches geschrieben habe, sind immer wenn ich aus einem Log File eine Zeile
in ein anderes "kopiert" habe japanische Zeichen erzeugt worden, ich weiß nicht ob das mit meinem Problem zusammenhängt.

Jedenfalls kann ich jetzt mit
wmic /?
dieses Verhalten provozieren. Allerdings nur, wenn ich in einem Verzeichnis bin. Auf C:\> bekomme ich die Hilfe Ausgabe.
Ich arbeite in c:\ tmp dort tritt das Problem auf, genau wie in jedem anderen Verzeichnis, soweit ich das ausprobiert habe.

Kennt jemand dieses Problem? Und weiß eventuell jemand was ich dagegen tun kann?
Gefühlt ist das so, das ich mit meinem Testen irgendein Verzeichnis voll geschrieben habe, oder mgl. irgendeinen
Windows Eigenen Log..... aber das ist nur so ein Gefühl.

Für eure Hilfe danke ich schon mal im Voraus
Gruß Steffen

Content-Key: 562373

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

Printed on: April 19, 2024 at 23:04 o'clock

Member: rubberman
rubberman Apr 01, 2020 at 18:05:33 (UTC)
Goto Top
Sicher hilft ein endlocalfür jedes setlocal, insbesondere wenn es in einer Schleife auftaucht. Aber ohne deinen Code zu kennen ...

Grüße
(auch) Steffen
Member: rubberman
rubberman Apr 01, 2020 at 18:23:35 (UTC)
Goto Top
Nachtrag ... Unbedingt sicherstellen dass dein Batchscript nicht zufällig genauso heißt wie eines der Kommandos im Code.
Member: cosmoH
cosmoH Apr 01, 2020, updated at Apr 02, 2020 at 07:38:40 (UTC)
Goto Top
Hallo rubberman,

ja, Danke für die Antwort. Das dachte ich dann auch mal. Wobei mir auch das irgendwie unklar ist, da welches setlocal auch immer weg sein sollte, wenn man die Konsole schließt, nahm ich an...
Habe dann auf Grund dessen mal so ein endlocal eingefügt, hat aber am Verhalten der Konsole nichts geändert. Was am schlimmsten ist, das wenn ich ein WMIC auf der commandline selbst aufrufe auch den Fehler erzeugt.
Wichtig wäre noch, wenn ich das bereinigte Script ohne die WMIC aufrufe ausführe läuft das problemlos durch, bis auf die Stellen wo es die ausgaben aus dem anderen Script erwarten würde...

Da das ganze recht umfangreich ist als Beispiel mal:
@echo off & setlocal
cls
set "Datei=test1.txt"  
wmic path CIM_LogicalDevice where "DeviceID like "%%VID_1059%%"" GET DeviceID  > %Datei%  
type info.txt | findstr /v ACPI-konformes >tmpInfo.txt
move /y tmpInfo.txt info.txt >nul 
type info.txt | findstr /v Hauptplatinenressourcen >> tmpInfo.txt
move /y tmpInfo.txt info.txt >nul 
type info.txt | findstr /v Programmierbarer >> tmpInfo.txt
move /y tmpInfo.txt info.txt >nul
type info.txt | findstr /v svchost.exe >> tmpInfo.txt
move /y tmpInfo.txt info.txt >nul
IF EXIST  tmpInfo.txt DEL /F /s /q tmpInfo.txt
echo ####################info.txt written############################
@@+++**……..HIER HABE ICH AUS PLATZGRÜNDEN WAS WEGGELASSEN**@@

set /a count=%AllCount%-1
set "serials="  

wmic path CIM_LogicalDevice where "DeviceID like "%%VID_1059%%"" GET DeviceID  > DEVIDinfo.txt  
for /f %%C in ('Find /V /C "" ^< test1.txt') do set AllCount=%%C  

echo Found %count% token.

for /f "skip=1" %%i in ('"wmic path CIM_LogicalDevice where "DeviceID like '%%VID_1059%%'" GET DeviceID" ') Do For %%B In (%%~i) do(   
	set _variable="%%i"  
	echo %_variable%
	Set serials=%_variable:~23,14%
	echo 1> %serials%.txt
)

wmic path CIM_LogicalDevice where "DeviceID like "%%VID_1059%%"" GET /value  >> DEVIDinfo.txt  
echo ######################################################################  >> DEVIDinfo.txt
wmic path CIM_LogicalDevice where "Description like '%%USB%%'" get /value  >> DEVIDinfo.txt  
echo ####################DEVIDinfo.txt written######################
wmic bios get serialnumber > SERIALinfo.txt
echo ####################SERIALinfo.txt written######################
endlocal

Das ist das Info Script, das andere, welches läuft, wertet nur die txt Files aus, die hier entstehen.
Mir hat es nichts geholfen, das zum x-ten mal durchzuschauen, aber wenn Dir was auffällt...…

danke Dir

Gruß Steffen
(Cosmo ist der Wauwi auf dem Bild..... das H steht für Hund face-wink )
Member: Penny.Cilin
Penny.Cilin Apr 02, 2020 at 05:05:05 (UTC)
Goto Top
Moin,

verwende für Dein Skript die Codetags. Diese findest Du links neben dem Editorfenster.

Gruss Penny.
Member: cosmoH
cosmoH Apr 02, 2020 at 07:36:53 (UTC)
Goto Top
Hallo Penny,

Danke, ja, hatte ich schon gesehen, aber beim schreiben gewohnheitsmäßig ignoriert. Schwöre Besserung face-wink

Gruß Steffen
Member: rubberman
rubberman Apr 02, 2020 at 16:13:13 (UTC)
Goto Top
Was am schlimmsten ist, das wenn ich ein WMIC auf der commandline selbst aufrufe auch den Fehler erzeugt.
Dann noch mal explizit: Heißt dein Script wmic.bat oder wmic.cmd? Gibt es im Dunstkreis (Arbeitsverzeichnis / PATH Umgebung) eine andere ausführbare Datei namens wmic (abgesehen von der wmic.exe unter C:\Windows\System32\wbem)? Nutzt du zufällig irgendeines dieser unsäglichen bat2exe-Dingenskirchen, die dazu führen dass dein Code im WOW64 Modus ausgeführt wird?

Grüße
Steffen
Member: cosmoH
cosmoH Apr 02, 2020 at 19:12:13 (UTC)
Goto Top
Hallo rubberman,

tausend Dank, das hat mein Problem gelöst. Ich Depp hatte die ausgelagerten Befehle in der wmic.bat gespeichert.
diese im selben Verzeichnis wie die Start Batch "Systeminfo.bat" gespeichert. Beim Aufruf der Systeminfo.bat (die hat mit ihrem Pendant allerdings keine Probleme) aus c:\tmp, in der auch die wmic.bat liegt ruft er anscheinend die wmic.bat mit jedem Aufruf aus ihr selbst heraus erneut auf, sprich 11 x WMIC"....irgendwas" ruft sich selbst.sich selbst.sich selbst...…. und so weiter auf, Geile Schleife hab ich da gebaut. Problem gelöst!

Noch einmal tausend Dank und ein schönes WE zu hause!!!! face-wink

Gruß Steffen
Member: rubberman
rubberman Apr 02, 2020 at 21:43:49 (UTC)
Goto Top
ruft er anscheinend die wmic.bat mit jedem Aufruf aus ihr selbst heraus erneut auf
Genau. Alle ausführbaren Dateien, deren Endung sich in der %PATHEXT%Umgebungsvariablen finden, können ohne Dateiendung aufgerufen werden. Dabei haben Dateien im Arbeitsverzeichnis Vorrang über Dateien in der PATH Umgebung. Heißt, dein Batchscript wurde immer zuerst gefunden und aufgerufen. Dabei ist es völlig nebensächlich, dass du 11 Aufrufe im Script hast. Er kommt nie über den ersten hinaus, da Zeilen synchron abgearbeitet werden. Also darauf gewartet wird, bis die Kommandozeile abgearbeitet ist, was aber nie passiert, da sich das Script rekursiv immer wieder erneut aufruft. Das erklärt auch den Fehler. Das endlocalwird nie erreicht (wobei das in deinem Fall nicht mal nötig ist, da es bei Scriptende implizit ausgeführt wird), stattdessen werden mit dem setlocalam Anfang immer weitere Subumgebungen erzeugt, bis das Maximum überschritten ist.

Grüße
Steffen