Sign in to follow this  
Followers 0
idle.newbie

Snippet for OemPnPDriversPath, setDevicePath clone

46 posts in this topic

OemPnPDriversPath.cmd

@ECHO OFF
IF "%1"=="" GOTO EOF
IF NOT EXIST %1 GOTO EOF
IF "%2"=="" GOTO EOF
IF NOT EXIST %2 GOTO EOF

SETLOCAL ENABLEDELAYEDEXPANSION
SET OemPnPDriversPath=$
SET STDOUT=WINNT.SIF
TYPE>%STDOUT% 2>NUL

::traverse drivers path
CALL :TRAVERSAL %1
ECHO %OemPnPDriversPath:~2%
::recreate winnt.sif
CALL :RECREATE %2 %STDOUT% Unattended OemPnPDriversPath "%OemPnPDriversPath:~2%"

GOTO EOF

:TRAVERSAL
PUSHD %1
IF EXIST *.INF SET OemPnPDriversPath=!OemPnPDriversPath!;%CD:~3%
FOR /F %%I IN ('DIR /AD /OGN /B') DO (
 CALL :TRAVERSAL %CD%\%%I
)
POPD
GOTO EOF

:RECREATE
::%1=Source, %2=Destination, %3=Section, %4=Key, %5=Value
SET SECTION=NO
SET KEY=NO
FOR /F "usebackq tokens=1,2*" %%I IN ("%1") DO (
 IF "%%J"=="=" (
   IF /I "%%I"=="%4" (
     ECHO   %4 = %5>>%2
     SET UPDATED=YES
   ) ELSE (
     ECHO   %%I %%J %%K>>%2
   )
 ) ELSE (
   IF /I "%%I"=="[%3]" (
     SET SECTION=YES
   ) ELSE (
     IF NOT "%SECTION%"=="NO" (
       IF "%KEY%"=="NO" (
         ECHO   %4 = %5>>%2
         SET KEY=YES
       )
       SET KEY=NO
     )
   )
   ECHO.>>%2
   ECHO %%I>>%2
 )
)
GOTO EOF

:EOF

It's a Pyron's SetDevicePath.exe clone in .cmd batch scripting, a modified version of my Detached.cmd. It scans every directories under where you specified, looking for *.inf, and write corresponding OemPnPDriverPath entry into WINNT.SIF.

It needs two arguments, #1 full-path to your drivers' directory, #2 your WINNT.SIF.

1.copy/extract every drivers to where it should be. eg:

XCOPY "C:\UWCD root\$OEM$\$1\Drivers" C:\Drivers
or
7za x Drivers_MassStorage.7z -y -oC:\

2.run the script.

OemPnPDriversPath.cmd C:\Drivers "C:\UWCD root\i386\WINNT.SIF"

note:

1.pretty your WINNT.SIF, make sure every "=" between key/value pair has space before/after it. eg:

OemPreinstall = Yes

You can do this with RegExp capable text editor like EmEditor, replace all "^(\s*;?\s*\w+)\s*=\s*" with "\1 = ".

2.do not run this .cmd inside i386, or your WINNT.SIF will be empty, 'cause output WINNT.SIF is on current directory.

0

Share this post


Link to post
Share on other sites

great ! nice ! wonderfull !

i like cmd scripts.

i will keep this one and try it.

:thumbup

Works perfect but the name you choose for WINNT.SIF in your example is a bit confusing. :wacko:

OemPnPDriversPath.cmd C:\Drivers "C:\UWCD root\i386\WINNT.SIF"

Use 8.3 naming convention for your path and it's more easy.

OemPnPDriversPath.cmd C:\Drivers C:\XPCREATE\CDROOT\i386\WINNT.SIF

Edited by Bilou_Gateux
0

Share this post


Link to post
Share on other sites

HUH??? Never seen this script before...

I guess I'll start using this one in my DriverPacks batch files !!!

:thumbup

superb!

0

Share this post


Link to post
Share on other sites

I can't get this script to work...

It DOES give output: I find a new WINNT.SIF file in the current directory, with everything in it except the comments. But unfortunately also without OemPnPDriversPath...

How did it work for you Bilou_Gateaux?

0

Share this post


Link to post
Share on other sites

My %systemdrive% is as described below:

$OEM$ dir

oemdir.jpg

PnPDrvrs dir

PnPDrvrs.jpg

UNATTEND.TXT code

Open command prompt in C:\PnPDrvrs:

OEMPnPDriversPath C:\PnPDrvrs C:\$OEM$\UNATTEND.TXT

C:\PnPDrvrs\WINNT.SIF content:

OemPnPDriversPath = "PnPDrvrs\Display\Intel;PnPDrvrs\Display\NVidia;PnPDrvrs\Hdc\Intel;PnPDrvrs\Media\Fujitsu;
***//cut for easy reading//***
PnPDrvrs\Net\BRCM;PnPDrvrs\Net\Intel;PnPDrvrs\System\Intel;PnPDrvrs\Usb\Intel"

0

Share this post


Link to post
Share on other sites

For me it is like this:

K:\OemPnPDriversPath.cmd

K:\$OEM$\$1\DP

K:\I386\winnt.sif

And OemPnPDriversPath.cmd has to search for devicepaths in K:\$OEM$\$1\DP, adding them to K:\I386\winnt.sif.

EDIT: but as I said, it doesn't work...

0

Share this post


Link to post
Share on other sites

The batch file doesn't direct edit your source WINNT.SIF but recreate a new one wich is saved to the dir where you have saved the batch file.

Try first to move the batch file to your DP dir ie K:\$OEM$\$1\DP and then, the resulting new SIF file should be in K:\$OEM$\$1\DP\WINNT.SIF

0

Share this post


Link to post
Share on other sites
The batch file doesn't direct edit your source WINNT.SIF but recreate a new one wich is saved to the dir where you have saved the batch file.

I know that... but the one that I find in the current directory doesn't contain the OemPnPDriversPath...

0

Share this post


Link to post
Share on other sites

OK i have created the same dir tree as you on my D: partition

D:\$OEM$\$1\PnPDrvrs contains all drivers subdirs and OEMPnPDriversPath.cmd

D:\I386 contains the original WINNT.SIF

Open command prompt:

cmd /k cd /d D:\$OEM$\$1\PnPDrvrs

run:

OEMPnPDriversPath D:\$OEM$\$1\PnPDrvrs D:\I386\WINNT.SIF

and check the result (new WINNT.SIF) in D:\$OEM$\$1\PnPDrvrs

OemPnPDriversPath = "$OEM$\$1\PnPDrvrs\Display\Intel;$OEM$\$1\PnPDrvrs\Display\NVidia;$OEM$\$1\PnPDrvrs\Hdc\Intel;$OEM$\$1\PnPDrvrs\Media\Fujitsu;$OEM$\$1\PnPDrvrs\Net\BRCM;$OEM$\$1\PnPDrvrs\Net\Intel;$OEM$\$1\PnPDrvrs\System\Intel;$OEM$\$1\PnPDrvrs\Usb\Intel"

But the solution is not clean as having the PnP Drivers dir on root of harddrive to build the OemPnPDriversPath =

Compare the result with my previous post.

I suggest to first build the winnt.sif with your DP dir in root of hard drive and then move to the subdir you want ie $OEM$\$1

0

Share this post


Link to post
Share on other sites

Hmm too bad... I thougt your script changed it at runtime! I'm still working on a script that automatically updates the path in the t-39 stage. Thus as a attached program! Actually exactly the same as Pyron's SetDevicePath.exe, but I want it as an cmd-script!

0

Share this post


Link to post
Share on other sites

The author is idle.newbie

Yes, it would be fine to dynamically update the WINNT.SIF at T-39.

0

Share this post


Link to post
Share on other sites
Actually exactly the same as Pyron's SetDevicePath.exe, but I want it as an cmd-script!

Why do you want a cmd file so badly, if the executable has been confirmed working by so many?

0

Share this post


Link to post
Share on other sites
Actually exactly the same as Pyron's SetDevicePath.exe, but I want it as an cmd-script!

Why do you want a cmd file so badly, if the executable has been confirmed working by so many?

Well, maybe hard to explain, but I'll try:

I just like to have something that I know HOW it works. Just out of curiosity, and to be assured that it does what I think it does. Also, I might want to add/modify some things, every now and then.

0

Share this post


Link to post
Share on other sites
Well, maybe hard to explain, but I'll try:

I just like to have something that I know HOW it works. Just out of curiosity, and to be assured that it does what I think it does.

I understand you, I'm the same. But if I see that something has been working for hundreds of people, then I'll gladly use it...

0

Share this post


Link to post
Share on other sites

This script is nice btw, but I'd wonder why he didn't use a utility to update the winnt.sif.

That way he could replace the whole :RECREATE routine into this line:

nircmd inisetval "d:\xp_unattend\I386\winnt.sif" "Unattended" "OemPnPDriversPath" "~qTHIS_IS_THE_NEW_VALUE~q"

http://www.nirsoft.net/utils/nircmd.html

0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.