Alle Treiber eines Verzeichnisses hinzufügen

Derzeit musste ich mich damit beschäftigen, mehrere unterschiedliche Computersysteme mit allen im Vorfeld vorhandenen Treibern zu installieren. Da bei wiederkehrenden Aufgaben der Wunsch nach minimiertem Aufwand nach einer Weile überwiegt, empfiehlt es sich, die Arbeitsschritte zu automatisieren. Im Bezug auf Treiber bei Windows-Systemen liegen hier zentral die *.inf-Dateien meist als Sammlung für verschiedene Systeme vor.
Da bei Systemen, die mehrfach gekauft worden sind, meist auch die Hardware wie zum Beispiel Netzwerkkarte, Soundkarte und so weiter, identisch sind, werden die kompletten Treiber des Herstellers in der Regel in Systemspezifischen Ordnern gesichert.
Hier muss nicht erwähnt werden, dass das Verfahren auch im Privatbereich bei einem Rechner, der regelmäßig neu installiert werden muss, zu gewissen Teilen sinnvoll ist. Im Bezug auf ein Test-Gerät (wie zum Beispiel mein Notebook), kann somit vieles vereinfacht werden. Dem Gerät werden alle verfügbaren Treiber hinzugefügt und somit eine Ersparnis von Zeit und Arbeitsaufwand realisiert.

Die hinzugefügten Treiber in einem Ordner werden mit zwei Befehlen hinzugefügt:

  • forfiles
  • pnputil

Der zugrunde liegende Befehl ist:

forfiles /p %1 /s /m *.inf /c “cmd /c pnputil -a @Path”

Forfiles geht ein Verzeichnis durch, welches mit „/p %1“ durch Eingabe des Anwenders abgefragt wird. Mit dem Parameter /s werden die Unterverzeichnisse rekursiv durchsucht. Der Parameter „/m *.inf“ setzt den Fokus (die Maske) auf alle Dateien, die auf *.inf enden. Mit dem Parameter /c wird ein Befehl ausgeführt. In diesem Fall wird die CMD aufgerufen, die pnputil -a (sprich: Treiber hinzufügen) an einem bestimmten Pfad (@Path) aufruft.

Der Befehl wird am besten mit dem Editor gespeichert  als z.B. „driver.cmd“. In einer elevated CMD (Ausführen als Administrator) wird diese dann aufgerufen und der Pfad dahinter geschrieben:

drivers.cmd C:\drivers\

Die Idee hinter dem Befehl habe ich auf google bei deploymentbunny gefunden.

Ferner sind in den Beispielen für forfiles auch ähnliche Verwendungsmöglichkeiten angegeben:

Beispiele:
FORFILES /?
FORFILES
FORFILES /P C:\WINDOWS /S /M DNS*.*
FORFILES /S /M *.txt /C „cmd /c type @file | more“
FORFILES /P C:\ /S /M *.bat
FORFILES /D -30 /M *.exe
/C „cmd /c echo @path 0x09 wurde vor 30 Tagben geändert“
FORFILES /D 01.01.2001
/C „cmd /c echo @fname ist seit dem 01.01.2001 neu“
FORFILES /D +7.12.2015 /C „cmd /c echo @fname ist seit heute neu“
FORFILES /M *.exe /D +1
FORFILES /S /M *.doc /C „cmd /c echo @fsize“
FORFILES /M *.txt /C „cmd /c if @isdir==FALSE notepad.exe @file“

(siehe auch)