jimpiet
Goto Top

Batch Programmierung mit Abfragen

Hallo,

ich versuche mittels WMI und Batch Die Auflösung auszulesen und jeweils eine Datei für die Höhe und die Breite mit dem jeweiligen Wert auszugeben.
Der WMI-Teil funktioniert schon und das auslesen der Daten aus den erzeugten Text-Dokumenten klappt auch.

Nun kriege ich es nicht hin (da ich eher weniger Komplexe Batch-Skripte bisher erstellt habe), dass er je nach Inhalt der Text-Dateien auch die am Ende benötigten Text-Dateien zu erstellen.

Es geht darum, dass wir 4:3 und 16:9 Monitore verwenden und im ganzen Unternehmen einheitliche Desktop-Hintergründe verteilt werden sollen. Damit jeder PC das richtige Wallpaper bekommt, soll die Verteilungsregel prüfen, ob Datei X und Datei Y vorhanden ist, wenn ja: Nimm Bild1 (das ist aber nicht relevant für das Problem)

Habe schonmal angefangen, etwas zu programmieren:

del c:\scripts\h.txt
del c:\scripts\w.txt
cscript c:\scripts\monitorw.vbs>c:\scripts\w.txt
cscript c:\scripts\monitorh.vbs>c:\scripts\h.txt
cd c:\scripts
IF findstr /S /M "1920" w.txt goto 1920>c:\scripts\w1920.txt  
REM 1920x1200
REM 1920x1080
IF findstr /S /M "1280" w.txt goto 1280>c:\scripts\w1280.txt  
REM 1280x1024
REM 1280x960
REM 1280x800
REM 1280x768
IF findstr /S /M "1680" w.txt goto 1680>c:\scripts\w1680.txt  
REM 1680x1050
IF findstr /S /M "1152" w.txt goto 1152>c:\scripts\w1152.txt  
REM 1152x864
REM 1152x720
IF findstr /S /M "1400" w.txt goto 1400>c:\scripts\w1400.txt  
REM 1400x1050
IF findstr /S /M "1440" w.txt goto 1440>c:\scripts\w1440.txt  
REM 1440x900
IF findstr /S /M "1600" w.txt goto 1600>c:\scripts\w1600.txt  
REM 1600x900
IF findstr /S /M "1024" w.txt goto 1024>c:\scripts\w1024.txt  
REM 1024x768



:1920
IF findstr /S /M "1200" h.txt>c:\scripts\h1200.txt  
IF findstr /S /M "1080" h.txt>c:\scripts\h1080.txt  
:END


:1280
IF findstr /S /M "1024" h.txt>c:\scripts\h1024.txt  
IF findstr /S /M "960" h.txt>c:\scripts\h960.txt  
IF findstr /S /M "800" h.txt>c:\scripts\h800.txt  
IF findstr /S /M "768" h.txt>c:\scripts\h800.txt  
:END


:1680
IF findstr /S /M "1050" h.txt>c:\scripts\h1050.txt  
:END


:1152
IF findstr /S /M "864" h.txt>c:\scripts\h864.txt  
IF findstr /S /M "720" h.txt>c:\scripts\h720.txt  


:1400
IF findstr /S /M "1050" h.txt>c:\scripts\h1050.txt  

:1440
IF findstr /S /M "900" h.txt>c:\scripts\h900.txt  

:1600
IF findstr /S /M "900" h.txt>c:\scripts\h900.txt  

:1024
IF findstr /S /M "768" h.txt>c:\scripts\h768.txt  

Ich vermute mal, dass ich da mit der IF Abfrage falsch gemacht habe.
Über Verbesserungsvorschläge oder andere Möglichkeiten, dies umzusetzen, wäre ich sehr erfreut face-smile

LG
JimPiet

Content-Key: 190527

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

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

Member: SteinBeiser
SteinBeiser Aug 31, 2012 at 09:13:31 (UTC)
Goto Top
findstr in der zeile vor dem if ohne /S /M
im if errorlevel abfragen 0 = wert gefunden 1 = nicht gefunden.
Member: bastla
bastla Aug 31, 2012 at 10:12:59 (UTC)
Goto Top
... oder besser gleich so:
findstr "1920" w.txt && goto :1920
Grüße
bastla
Member: JimPiet
JimPiet Aug 31, 2012 at 10:19:17 (UTC)
Goto Top
Vielen Dank,
habe es jetzt mit dem errorlevel gemacht und es klappt face-smile
Mitglied: 60730
60730 Aug 31, 2012 updated at 11:46:37 (UTC)
Goto Top
Salü,

Zitat von @bastla:
... oder besser gleich so:
findstr "1920" w.txt && goto :1920
> 

oder gleich so:
C:\>for %a in (1024 1400 1440 1600 1680 1920) do findstr "%a" c:\scripts\h.txt && goto %a
wobei das a) wegen dem einen % nur ne Demo für die Dosbox ist und b) derzeit ja eh nur noch eine weitere nicht schlüssige Abfrage in dem Sprungziel steckt und keine echte Aktion.

btw:
Wenn du sowas machst:
cscript c:\scripts\monitorw.vbs>c:\scripts\w.txt
mit einer pipe, dann brauchst du vorher kein
del c:\scripts\w.txt

Gruß
Member: JimPiet
JimPiet Aug 31, 2012 at 12:50:24 (UTC)
Goto Top
Ahhhhh, gut zu wissen, danke face-smile
Member: AndreasHoster
AndreasHoster Aug 31, 2012 updated at 13:13:57 (UTC)
Goto Top
Und ich frage mich, was das Ganze soll.
Ich würde die VBS so programmieren, daß die gleich die h???? und w???? Dateien schreibt.
Dann könnte man sich 64 Zeilen Batchcode sparen. Schließlich hat man dort ja die Werte für Höhe und Breite schon.

Kurz zusammengeschustert (gibt auch nur den primären Monitor aus):
Pfad="C:\temp\"  
Set fso = CreateObject("Scripting.FileSystemObject")  
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")  
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_DesktopMonitor where DeviceID='DesktopMonitor1'", "WQL")  
For Each objItem In colItems
         Set ofile = fso.CreateTextFile(Pfad & "h" & objItem.ScreenHeight & ".txt", True)  
         ofile.WriteLine "Hier steht, was in der Datei stehen sollte."  
	ofile.Close
	Set ofile = fso.CreateTextFile(Pfad & "w" & objItem.ScreenWidth & ".txt", True)  
	ofile.WriteLine "Hier steht, was in der Datei stehen sollte."  
	ofile.Close
Next