wasdalos
Goto Top

REQ QUERY nach IF ausführen

Hallo,
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

Content-Key: 292560

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

Printed on: April 25, 2024 at 07:04 o'clock

Mitglied: 122990
122990 Jan 08, 2016 updated at 14:48:30 (UTC)
Goto Top
@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
)
Gruß grexit
Member: Wasdalos
Wasdalos Jan 08, 2016 at 13:14:38 (UTC)
Goto Top
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....
Mitglied: 122990
122990 Jan 08, 2016 updated at 13:19:46 (UTC)
Goto Top
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 ...
Der Code selber funktioniert einwandfrei!

Ein bisschen mehr Mühe bei der Fragestellung geben wäre in Zukunft empfehlenswert...
Member: Wasdalos
Wasdalos Jan 08, 2016 updated at 13:32:14 (UTC)
Goto Top
@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" ( 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  
pause

so wenn ich das öffne sagt er mir weder eng ger was er machen müsste duch echo noch erstellt er die .csv.


Um genauer zu werden. Ich habe 2 computer. Einer auf Deutsch der andere Auf Englisch. Beide erstellen eine Datei in der Mehrere Sachen stehen,
die bis auf die Sprache Identisch sind. Nun soll der Teil hier oben die Computersprache herausfinden und dann zum teil mit der Richtigen Sprach gehen.

Was ich meinte mit Testen war, das ich deinen Code genommen hab ihn in ne .bat gepackt hab und mir das was das echo ausgibt anzeigen lassen wollte
Dabei wurde aber nichts angezeigt spich es ist nichts passiert.
Mitglied: 122990
122990 Jan 08, 2016 updated at 14:48:14 (UTC)
Goto Top
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 ...

@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 face-wink ein bißchen Köpfchen benutzen schadet zwischendurch nicht...
Mitglied: 122990
122990 Jan 08, 2016 updated at 13:59:20 (UTC)
Goto Top
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
Member: Wasdalos
Wasdalos Jan 08, 2016 updated at 14:11:48 (UTC)
Goto Top
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
)

hier einmal alles..........

Ersten war das mit dem %%a beabsichtigt aus dem grund den du jetzt siehts.

Ich hänge noch ein foto dran bei dem du siehst was du passiert wenn ich die .bat ausführe.

.bat ausgeführt <- ist das Bild auf imgur.com
Dort siehst du das nur die Pause beachtet wird.
Das Bild bezieht sich nur auf den Code den du mir geschickt hast und nicht den den ich oben geschrieben habe.

Wenn ich nur das req ausgeben lasse funktioniert es.
Kann es eventuell sein das man mit skip=2 hinter die ausgabe kommt. Sie besteht ja nur aus 2 Zeilen.

Danke schonmal für deine Hilfe aber geh nicht immer davon aus das hier nur dumme Menschen rumlaufen. Ich mache Batch erst seit gestern und kanns halt noch nicht so gut. aber ein bisschen hab ich schon gelernt..........
Mitglied: 122990
122990 Jan 08, 2016 updated at 14:21:56 (UTC)
Goto Top
Aha mal wider was neue was wir nicht sehen konnten klasse face-sad
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
)
Member: Wasdalos
Wasdalos Jan 08, 2016 at 14:26:19 (UTC)
Goto Top
well, ich hab den fehler gefunden.

das hat nix mit dem setlocal enabledelayedexpansion zu tun.

Die ausgabe der zahl 0409 oder 0407 hat am ende noch zwei mal space drann

somit stand in der if anweisung: "0409 "=="0409".
Deswegen war nie was gleich und es kam kein ergebniss.
Mitglied: 122990
122990 Jan 08, 2016 updated at 14:37:17 (UTC)
Goto Top
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: =!
(Verwendung von delayedexpansion innerhalb von deiner FOR-Schleife vorausgesetzt.)

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
Mitglied: 116301
116301 Jan 08, 2016 updated at 14:43:30 (UTC)
Goto Top
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 immerface-wink

Gruß Dieter
Member: Wasdalos
Wasdalos Jan 08, 2016 updated at 14:45:45 (UTC)
Goto Top
Da hat Dieter recht :D. Es waren 2 Spaces dahinter, hat man in Notepad++ nicht gesehen :/

Es muss jetzt doch das %%a in der If bedingung verändert werden dadurch das es eine Variable in einer Klammer ist oder?

Ohne den neuen teil funktionierte nämlich alles.
Mitglied: 116301
116301 Jan 08, 2016 updated at 14:47:18 (UTC)
Goto Top
Hallo nochmal!

Die Leerzeichen steht am Ende der For-Schleife...
Member: Cloudy
Cloudy Jan 08, 2016 at 15:19:19 (UTC)
Goto Top
Zum Thema Notepad++: http://imgur.com/4xpinMm
Wenn du das Aktivierst werden dir Tabulatoren, Leerzeichen und andere Steuerzeichen auch angezeigt.