ich werde hier einige praktische NT-Befehlsketten veroeffentlichen, welche ich in letzter Zeit öfters brauche und von denen ich denke, dass sie anderen auch irgendwann mal helfen könnten. Ich werde das ganze hier immer mal wieder von Zeit zu Zeit erweitern, sobald ich wieder interessante Codeschnipsel habe.
Anmerkungen
Textsyntax
In den Zwischentexten und Erläuterungen, werde ich zur leichteren Verständlichkeit die Befehle kursiv und blau darstellen und Variablen werden orange dargestellt sein. Dies entspricht übrigens den Farben des Syntax-Highlighters von Notepad++ (ausser dass Befehle dort fett und nicht kursiv dargestellt sind).
Scriptform
Ich werde die Befehle hier in der Form reinstellen, wie ich sie in meinen Scripten verwende. Möchte man die Befehle direkt innerhalb der Kommandozeile nutzen so ist es notwendig bei allen for-Schleifen das %%i durch %i zu ersetzen.
WMI
Der von mir sehr häufig verwendete Befehl wmic gehört zu den Windows Management Instrumentations (kurz: WMI). Diese sind seit Windows 2000 integraler Bestandteil von Windows und funktionieren in jeder nachfolgenden Version. Bei der ersten Verwendung des Befehls wmic wird die Ausführung etwas laenger dauern, da die entsprechenden WMI-Komponenten erst installiert werden muessen.
Kompatibilität
Alle Codeschnipsel wurden von mir unter Windows XP geschrieben und getestet. Es kann jedoch sein, dass z.B. der WMI-Output unter anderen Systemen (insbesondere Vista) anders aussieht, bzw. andere oder mehr Inhalte hat. In solchen Fällen muessen die Befehle natürlich entsprechend angepasst werden. Grundsätzlich sollten sie aber auf allen Systemen seit Windows 2000 funktionieren.
Codeboxen
Ich verwende hier auch für wenige Zeilen Codeboxen um den ansonsten vorhandenen Zeilenumbruch zu verhindern. Leider bleibt dadurch eine grosse weisse Flaeche unterhalb der Codezeilen dies lässt sich leider nicht verhindern.
Codeschnipsel
Laufwerksbuchstabe eines Laufwerks mit bestimmtem Namen herausfinden
Dies hier benötigte ich um eine automatisierte Treiberinstallation vom USB-Stick waehrend der Windows-Installation durchzufuehren.
Das ganze lässt sich mit einer kleinen Änderung des wmic-Kommandos (CD-Laufwerke statt logische Partitionen auslesen) auch für die direkte Installation von Treibern und/oder Software von der Windows-CD verwenden. Dies ist dann eine weit schönere Lösung als sie z.B. auf windows-unattended.de empfohlen wird, da man bei meiner Lösung keine Extra-Datei auf der CD haben muss nach der die Schleife sucht.
Der Computer gibt mit Hilfe von wmic alle logischen Laufwerke aus und filtert dann mit find das Laufwerk mit der Bezeichnung DRIVERS heraus. Danach wird aus der entstandenen Ausgabe mit Hilfe der for-Schleife der Laufwerksbuchstabe als Variable %instdrv% ausgegeben.
REM Suche Laufwerk mit der Bezeichnung "DRIVERS" und setze den Laufwerksbuchstaben als Variable %instdrv% for /f "tokens=1" %%i in ('"wmic logicaldisk | find /i "DRIVERS""') do set instdrv=%%i
Rechnermodell auslesen
Dies hier benötigte ich um die Installation der Treiber für viele gleiche Rechner zu automatisieren. Da die direkte Integration der Treiber oftmals nicht funktionierte, wollte ich lieber die zugehörigen Installer für jedes Modell einzeln ausführen.
Hier wird mit wmic zuerst der Hersteller, dann die Modellserie und das Modell ausgelesen. Die erste for-Schleife liest ganz einfach den Hersteller aus und setzt das Ergebnis in die Variable %Vendor%.
Die zweite Schleife kürzt die ausgabe noch einmal auf das erste Wort. Wenn die Ausgabe also "Dell Computer Corporation" lautete, so steht danach in der Variable %Vendor% nur noch "Dell".
Die dritte for-Schleife liest die Modellserie und das Modell aus und setzt diese in die Variable %Model%.
Da sich Modellserie und Modellname nur gemeinsam auslesen lassen, wird die Variable %Model% der dritten und vierten Schleife nochmals in die Modellserie und das genaue Modell aufgeteilt und jeweils in die Variablen %ModelSeries% und %ModelName% gesetzt.
Angenommen es handelt sich bei dem Computer um einen Dell OptiPlex 755, so erhalten wir hiermit die drei Werte:
%Vendor%=Dell
%ModelSeries%=OptiPlex
%ModelName%=755
REM Ueberpruefe Hersteller for /F "tokens=2 Delims==" %%i in ('wmic csproduct get vendor /value') do @set Vendor=%%i REM Verwende nur das erste Wort der Hersteller-Bezeichnung for /F "tokens=1 Delims= " %%i in ('echo %Vendor%') do @set Vendor=%%i REM Check for Model for /F "tokens=2 Delims==" %%i in ('wmic csproduct get name /value') do @set Model=%%i REM Ueberpruefe Moedellserie for /F "tokens=1 Delims= " %%i in ('echo %Model%') do @set ModelSeries=%%i REM Uberpruefe Modellname for /F "tokens=2 Delims= " %%i in ('echo %Model%') do @set ModelName=%%i
Aktuelles Arbeitsverzeichnis herausfinden und als Variable setzen
Es kommt immer wieder vor, dass man innerhalb eines Scriptes ein Verzeichnis wechseln möchte. Aber was ist wenn man dann wieder in das Ausgangsverzeichnis zurückspringen möchte? Dann muss man vorher eine entsprechende Variable gesetzt haben. Das mache ich hiermit.
cd (ohne weitere Angaben) gibt ja bekanntlich das Aktuelle Verzeichnis aus. Dieses wird an die for-Schleife übergeben, welche es als Variable %ScriptDir% setzt.
Mit einer weiteren Schleife kann man übrigens auch noch das aktuelle Laufwerk als Variable setzen.
REM Aktuelles Verzeichnis in die Variable %ScriptDir% schreiben for /F "tokens=1" %%i in ('cd') do @set ScriptDir=%%i REM Aktuelles Laufwerk in die Variable %ScriptDrive% schreiben for /F "tokens=1 delims=\" %%i in ('echo %ScriptDir%') do @set ScriptDrive=%%i
Datum und Uhrzeit in ein Dateinamen-freundliches Format bringen
Manchmal möchte man in dem Dateinamen einer Ausgabedatei das aktuelle Datum und die Uhrzeit unterbringen. Die Befehle date und time liefern leider keine Werte die man hier gut verwenden könnte. Um die Uhrzeit und das Datum in ein Format zu bringen, welches in Dateinamen akzeptiert wird lese ich die beiden werte aus und sortiere sie so um, dass eine Variable mit dem Aufbau YYYYMMDDHHmm (also: JahrMonatTagStundeMinute) herauskommt. Die Variable heißt %daytime%.
for /f "tokens=1,2,3 delims=. " %%i in ('date /t') do set day=%%k%%j%%i for /f "tokens=1,2 delims=: " %%i in ('time /t') do set time=%%i%%j set daytime=%day%%time%
Dieser Beitrag wurde von sкavєи bearbeitet: 21. August 2008 - 10:40