REQ QUERY nach IF ausführen
Hallo,
ich möchte gerne die Windowssprache mit
herausfinden. Es wird eine Zahl (0409 für Englisch und 0407 für Deutsch) ausgegeben. Je nachdem welche Sprache ausgegebn wird
möchte ich eine REQ QUERY ausführen mit unterschiedlichen FIND bedingungen ("enabled" / "aktiviert") da je nach Langueg halt etwas anderes in der durchsuchten datei steht.
Geht das? Gibt es alternativen?
Danke für eure Hielfe heute schon zum zweiten mal :D
ich möchte gerne die Windowssprache mit
reg query "hklm\system\controlset001\control\nls\language" /v Installlanguage
herausfinden. Es wird eine Zahl (0409 für Englisch und 0407 für Deutsch) ausgegeben. Je nachdem welche Sprache ausgegebn wird
möchte ich eine REQ QUERY ausführen mit unterschiedlichen FIND bedingungen ("enabled" / "aktiviert") da je nach Langueg halt etwas anderes in der durchsuchten datei steht.
Geht das? Gibt es alternativen?
Danke für eure Hielfe heute schon zum zweiten mal :D
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 292560
Url: https://administrator.de/forum/req-query-nach-if-ausfuehren-292560.html
Ausgedruckt am: 07.05.2025 um 11:05 Uhr
14 Kommentare
Neuester Kommentar

@echo off
for /f "skip=2 tokens=3" %%a in ('reg query "hklm\system\controlset001\control\nls\language" /v Installlanguage') DO set lang=%%a
if "%lang%" == "0409" (
echo Englisch
rem tu sonst was
)
if "%lang%" == "0407" (
echo Deutsch
rem tu sonst noch was
)

Zitat von @Wasdalos:
mh, wenn ich das so teste macht er einfach gar nichts. Also ich hab nur getestet was er zrückgibt (englsich/deitsch) und er macht nichts....
Steht doch da das du das was du damit machen willst selber noch ergänzen musst , oh mann ej, das weis hier doch keiner was du mit der Info machen willst ...mh, wenn ich das so teste macht er einfach gar nichts. Also ich hab nur getestet was er zrückgibt (englsich/deitsch) und er macht nichts....
Der Code selber funktioniert einwandfrei!
Ein bisschen mehr Mühe bei der Fragestellung geben wäre in Zukunft empfehlenswert...

Naja wenn du Dinge veränderst von denen du nicht weißt was sie bewirken und dann schreist "geht nicht" ist doch klar das es nicht funktionieren kann, erstens setzt du hier die Klammern falsch und zweitens hast du die Laufvariable %%t umbenannt und benutzt dann hinterher %%a als Namen für die CSV das kann ja nicht funktionieren !! Deswegen habe ich ja die Variable %lang% in der Schleife gesetzt, die Laufvariable ist ja außerhalb der Schleife auch nicht mehr verfügbar ...
ein bißchen Köpfchen benutzen schadet zwischendurch nicht...
@echo off
for /f "skip=2 tokens=3" %%t in ('reg query "hklm\system\controlset001\control\nls\language" /v Installlanguage') DO set lang=%%t
if "%lang%" == "0409" (
SCHTASKS /Query /v /FO csv | FIND "LOCAL SERVICE" | FIND "Enable" >C:\Temp\a\%lang%.csv
)
if "%lang%" == "0407" (
SCHTASKS /Query /v /FO csv | FIND "LOCAL SERVICE" | FIND "Enable" > C:\Temp\a\%lang%.csv
)
pause
Dabei wurde aber nichts angezeigt spich es ist nichts passiert.
Weil du wahrscheinlich per Doppelklick ausgeührt hast und keinen Pause Befehl genutzt hast, deshalb 
Bitte lese doch auch mal das Tutorial zur FOR-Schleife, damit wir hier nicht jedes mal die Grundlagen dazu runterbeten müssen.
Tutorial zur FOR-Schleife
Tutorial zur FOR-Schleife

Aha mal wider was neue was wir nicht sehen konnten klasse 
Der Grund ist nicht genutzes DelayedExpansion: wenn man Variablen innerhalb einer FOR-Schleife setzt und darin weiterverwendet musst du DELAYEDEXPANSION verwenden und dann stattdessen die Variable %lang% in Ausrufezeichen setzen statt Prozentzeichen, also !lang!.
Deshalb habe ich dir auch das Tutorial zur FOR-Schleife ans Herz gelegt, dort steht das drin unter Exkurs verzögerte Variablenerweiterung !!
Warum du aber bei Deusch und Englisch beides mal den selben Befehl nutzt ist mir nicht klar ??
Der Grund ist nicht genutzes DelayedExpansion: wenn man Variablen innerhalb einer FOR-Schleife setzt und darin weiterverwendet musst du DELAYEDEXPANSION verwenden und dann stattdessen die Variable %lang% in Ausrufezeichen setzen statt Prozentzeichen, also !lang!.
setlocal ENABLEDELAYEDEXPANSION
Dort siehst du das nur die Pause beachtet wird.
Das ist die Folge von nicht genutztem Delayed Expansion dann stimmt natürlich der Vergleich nicht mehr und keine IF-Abfrage trifft!Deshalb habe ich dir auch das Tutorial zur FOR-Schleife ans Herz gelegt, dort steht das drin unter Exkurs verzögerte Variablenerweiterung !!
Warum du aber bei Deusch und Englisch beides mal den selben Befehl nutzt ist mir nicht klar ??
@echo off & setlocal ENABLEDELAYEDEXPANSION
for /f "usebackq delims=" %%a in ("X:\Scanner\server.txt") DO (
echo Server: %%a
for /f "skip=2 tokens=3" %%t in ('reg query "hklm\system\controlset001\control\nls\language" /v Installlanguage') DO set lang=%%t
if "!lang!" == "0409" (
echo Englisch
SCHTASKS /Query /v /FO csv | FIND "LOCAL SERVICE" | FIND "Enable" >C:\Temp\a\%%a.csv
)
if "!lang!" == "0407" (
echo Deutsch
SCHTASKS /Query /v /FO csv | FIND "LOCAL SERVICE" | FIND "Enable" >C:\Temp\a\%%a.csv
)
echo Liste wurde am %date% erstellt > C:\Temp\a\%%a.txt
echo .>>C:\Temp\a\%%a.txt
FOR /F "tokens=1-18* delims=, " %%i in (C:\Temp\a\%serv%.csv) do @echo %%i %%j %%t %%w >>C:\Temp\a\%%a.txt
Echo .>>C:\Temp\a\%%a.txt
Set /A "Counter=0"
FOR /F "delims=" %%A IN (%%a.csv) DO SET /A "Counter+=1"
echo Es wurden %Counter% Jobs gefunden >> C:\Temp\a\%%a.txt
echo .>>C:\Temp\a\%%a.txt
echo ########################################################################################## >>C:\temp\a\%%a.txt
del C:\Temp\a\%%a.csv
)

das hat nix mit dem setlocal enabledelayedexpansion zu tun.
Doch, les mal das Tutorial ...Für den Zugriff auf eine Variable die innerhalb von Klammern gesetzt werden geht das sonst nicht anderst, bzw. nur noch mit CALL SET.die ausgabe der zahl 0409 oder 0407 hat am ende noch zwei mal space drann
Kann normalerweise nicht da ein Space der Default Delimiter einer FOR-Schleife ist und somit durch das Token nicht mit in der Variablen landet.Oder da hat dein OS mist eingebaut.
Ersetzen kann man Spaces in einer Variablen aber ganz einfach so:
set lang=!lang: =!
Außerhalb einer FOR-Scheife geht es natürlich auch so
set lang=%lang: =%
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Danke.
Gruß grexit

Hallo Wasdalos!
Das Leerzeichen am Ende der Variablen %lang% kommt von hier "DO set lang=%%t ", also kein Zeilenumbruch nach dem t, a oder was auch immer
Gruß Dieter
Das Leerzeichen am Ende der Variablen %lang% kommt von hier "DO set lang=%%t ", also kein Zeilenumbruch nach dem t, a oder was auch immer
Gruß Dieter

Hallo nochmal!
Die Leerzeichen steht am Ende der For-Schleife...
Die Leerzeichen steht am Ende der For-Schleife...
Zum Thema Notepad++: http://imgur.com/4xpinMm
Wenn du das Aktivierst werden dir Tabulatoren, Leerzeichen und andere Steuerzeichen auch angezeigt.
Wenn du das Aktivierst werden dir Tabulatoren, Leerzeichen und andere Steuerzeichen auch angezeigt.