Jump to content

CMD script not working - FOR issue?


George King

Recommended Posts

Hi, i´m working on new Windows 7 Update Pack Tool and i wrote this:

echo Adding registry weaks to enable RunOnceEx for install Special Updates...

REG LOAD HKLM\Slipstream "%WIM%\Windows\System32\Config\Software" >nul
SET ROE=HKLM\Slipstream\Microsoft\Windows\CurrentVersion\RunOnceEx

REG ADD %ROE% /v TITLE /d "Installing updates" /f >nul
REG ADD %ROE% /v Flags /t REG_DWORD /d "00000014" /f >nul
REG ADD %ROE% /d "%WinDir%\System32\rundll32.exe %WinDir%\System32\iernonce.dll,RunOnceExProcess" /f >nul

cd SpecialUpdates
set /a NUM=0
if not exist "%WIM%\Windows\Setup\Updates" mkdir "%WIM%\Windows\Setup\Updates" >nul
FOR %%f IN ("*.*") DO (
copy /Y "%%f" "%WIM%\Windows\Setup\Updates"
REG ADD %ROE%\00%NUM% /ve /d "%%f" /f
REG ADD %ROE%\00%NUM% /v %%f /d "%WinDir%\Setup\Updates\%%f /q" /f
set /a NUM+=1
)
echo %NUM%

pause
REG UNLOAD HKLM\Slipstream
cd..

Writing into registry works, but under HKLM\Slipstream\Microsoft\Windows\CurrentVersion\RunOnceEx is only one key 000 i´m used set /a NUM=0 and set /a NUM+=1 in FOR, but i don´t know why REG ADD %ROE%\00%NUM% /ve /d "%%f" /f not working if i make echo %NUM% it give me 3 (in folder are 3 Updates). Don´t know why script write only 000 key. I think it must write key 000, 001, 002

4gqe12.png

Edited by George King
Link to comment
Share on other sites

echo Adding registry weaks to enable RunOnceEx for install Special Updates...

REG LOAD HKLM\Slipstream "%WIM%\Windows\System32\Config\Software" >nul
SET ROE=HKLM\Slipstream\Microsoft\Windows\CurrentVersion\RunOnceEx

REG ADD %ROE% /v TITLE /d "Installing updates" /f >nul
REG ADD %ROE% /v Flags /t REG_DWORD /d "00000014" /f >nul
REG ADD %ROE% /d "%WinDir%\System32\rundll32.exe %WinDir%\System32\iernonce.dll,RunOnceExProcess" /f >nul

cd SpecialUpdates
set /a NUM=0
if not exist "%WIM%\Windows\Setup\Updates" mkdir "%WIM%\Windows\Setup\Updates" >nul
FOR %%f IN ("*.*") DO (
copy /Y "%%f" "%WIM%\Windows\Setup\Updates"
REG ADD %ROE%\00%NUM% /ve /d "%%f" /f
REG ADD %ROE%\00%NUM% /v %%f /d "%WinDir%\Setup\Updates\%%f /q" /f
goto :increase
)
echo %NUM%

pause
REG UNLOAD HKLM\Slipstream
cd..

:increase
set /a NUM+=1
goto :eof

try this

when i was working on WLM i remember that the for didn't increase until it gets out from the loop

i fixed it that way i think

try it and tell me

Link to comment
Share on other sites

MSFN has an excellent resource on ROE.

http://unattended.ms...5fe4e2b832a08a/

Dark madness is right. You need to declare the number order


SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx

REG ADD %KEY% /V TITLE /D "Installing Applications" /f

REG ADD %KEY%\005 /VE /D "Adobe Reader 6" /f
REG ADD %KEY%\005 /V 1 /D "%systemdrive%\install\AdobeReader6\AR6.msi /qn" /f

REG ADD %KEY%\010 /VE /D "Alcohol 120" /f
REG ADD %KEY%\010 /V 1 /D "%systemdrive%\install\alcohol\setup.exe /qn" /f
REG ADD %KEY%\010 /V 2 /D "REGEDIT /S %systemdrive%\install\alcohol\register.reg" /f

Edited by Mr_Smartepants
Link to comment
Share on other sites

echo Adding registry weaks to enable RunOnceEx for install Special Updates...

REG LOAD HKLM\Slipstream "%WIM%\Windows\System32\Config\Software" >nul
SET ROE=HKLM\Slipstream\Microsoft\Windows\CurrentVersion\RunOnceEx

REG ADD %ROE% /v TITLE /d "Installing updates" /f >nul
REG ADD %ROE% /v Flags /t REG_DWORD /d "00000014" /f >nul
REG ADD %ROE% /d "%WinDir%\System32\rundll32.exe %WinDir%\System32\iernonce.dll,RunOnceExProcess" /f >nul

cd SpecialUpdates
set /a NUM=0
if not exist "%WIM%\Windows\Setup\Updates" mkdir "%WIM%\Windows\Setup\Updates" >nul
FOR %%f IN ("*.*") DO (
copy /Y "%%f" "%WIM%\Windows\Setup\Updates"
REG ADD %ROE%\00%NUM% /ve /d "%%f" /f
REG ADD %ROE%\00%NUM% /v %%f /d "%WinDir%\Setup\Updates\%%f /q" /f
goto :increase
)
echo %NUM%

pause
REG UNLOAD HKLM\Slipstream
cd..

:increase
set /a NUM+=1
goto :eof

try this

when i was working on WLM i remember that the for didn't increase until it gets out from the loop

i fixed it that way i think

try it and tell me

Not working, look:

fwj0jo.png

The script will exit without REG UNLOAD etc and FOR was run only for one time, it must run 3 times (in folder are 3 updates)

Any ideas?

Link to comment
Share on other sites

You cannot use a changing environment variable in a script loop without using "SETLOCAL EnableDelayedExpansion".

Try the following code:

SETLOCAL EnableDelayedExpansion

echo Adding registry tweaks to enable RunOnceEx for install Special Updates...

REG LOAD HKLM\Slipstream "%WIM%\Windows\System32\Config\Software" >nul
SET ROE=HKLM\Slipstream\Microsoft\Windows\CurrentVersion\RunOnceEx

REG ADD %ROE% /v TITLE /d "Installing updates" /f >nul
REG ADD %ROE% /v Flags /t REG_DWORD /d "00000014" /f >nul
REG ADD %ROE% /d "%WinDir%\System32\rundll32.exe %WinDir%\System32\iernonce.dll,RunOnceExProcess" /f >nul

cd SpecialUpdates
set /a NUM=0
if not exist "%WIM%\Windows\Setup\Updates" mkdir "%WIM%\Windows\Setup\Updates" >nul
FOR %%f IN ("*.*") DO (
set /a ROENUM=!NUM!*5
If !ROENUM! LSS 10 (set "ROESTR=00!ROENUM!") ELSE (
If !ROENUM! LSS 100 (set "ROESTR=0!ROENUM!") ELSE (
set "ROESTR=!ROENUM!"))

copy /Y "%%f" "%WIM%\Windows\Setup\Updates"
REG ADD %ROE%\!ROESTR! /ve /d "%%f" /f
REG ADD %ROE%\!ROESTR! /v %%f /d "%WinDir%\Setup\Updates\%%f /q" /f
set /a NUM+=1
echo. !ROESTR!: "%%f"
)
echo.
echo !NUM! files added to ROE.
echo.
pause
REG UNLOAD HKLM\Slipstream
cd..

This script will properly handle up to 200 files with standard ROE numbering (multiples of 5, starting at 0).

And, yes, the exclamation points (!) are absolutely necessary for environment variables that change with EnableDelayedExpansion.

Edited by 5eraph
Link to comment
Share on other sites

You cannot use a changing environment variable in a script loop without using "SETLOCAL EnableDelayedExpansion".

Try the following code:

SETLOCAL EnableDelayedExpansion

echo Adding registry tweaks to enable RunOnceEx for install Special Updates...

REG LOAD HKLM\Slipstream "%WIM%\Windows\System32\Config\Software" >nul
SET ROE=HKLM\Slipstream\Microsoft\Windows\CurrentVersion\RunOnceEx

REG ADD %ROE% /v TITLE /d "Installing updates" /f >nul
REG ADD %ROE% /v Flags /t REG_DWORD /d "00000014" /f >nul
REG ADD %ROE% /d "%WinDir%\System32\rundll32.exe %WinDir%\System32\iernonce.dll,RunOnceExProcess" /f >nul

cd SpecialUpdates
set /a NUM=0
if not exist "%WIM%\Windows\Setup\Updates" mkdir "%WIM%\Windows\Setup\Updates" >nul
FOR %%f IN ("*.*") DO (
set /a ROENUM=!NUM!*5
If !ROENUM! LSS 10 (set "ROESTR=00!ROENUM!") ELSE (
If !ROENUM! LSS 100 (set "ROESTR=0!ROENUM!") ELSE (
set "ROESTR=!ROENUM!"))

copy /Y "%%f" "%WIM%\Windows\Setup\Updates"
REG ADD %ROE%\!ROESTR! /ve /d "%%f" /f
REG ADD %ROE%\!ROESTR! /v %%f /d "%WinDir%\Setup\Updates\%%f /q" /f
set /a NUM+=1
echo. File !NUM! processed as !ROESTR!: "%%f"
)
echo.
echo !NUM! files added to ROE.
echo.
pause
REG UNLOAD HKLM\Slipstream
cd..

This script will properly handle up to 200 files with standard ROE numbering (multiples of 5, starting at 0).

And, yes, the exclamation points (!) are absolutely necessary for environment variables that change with EnableDelayedExpansion.

Wow, it working :thumbsup_anim: . Many thanks.

Can you specify for me this code? I´m not sure if understand it...

 set /a ROENUM=!NUM!*5
If !ROENUM! LSS 10 (set "ROESTR=00!ROENUM!") ELSE (
If !ROENUM! LSS 100 (set "ROESTR=0!ROENUM!") ELSE (
set "ROESTR=!ROENUM!"))

Edited by George King
Link to comment
Share on other sites

That code converts the number of the file it is working on into a proper string to be used for your registry entries.

  1. First, the file number (starting at zero) is multiplied by 5, then saved as ROENUM by the SET command.
  2. The If statements convert the number !ROENUM! into the proper string !ROESTR! by adding leading zeros where necessary. For example:
    • NUM = ROENUM = ROESTR
      0 = 0 = 000
      1 = 5 = 005
      2 = 10 = 010
      ..
      19 = 95 = 095
      20 = 100 = 100
      ..
      199 = 995 = 995
      200 = 1000 = 1000

At NUM=200 it starts using four-digit ROE numbers, which will break the intended file execution order. :(

  • ..
    080
    085
    090
    095
    100
    1000
    1005
    1010
    1015
    1020
    1025
    1030
    1035
    1040
    1045
    105
    1050
    1055
    ..

Edited by 5eraph
Link to comment
Share on other sites

  • 1 month later...

5eraph,

I want add the DirectX switch, can you look why it not working? All working, but writing into registry with DX install switch (yes, swith working) wont working. I get error, too much parameters.... Any Ideas?

SETLOCAL EnableDelayedExpansion

echo.
echo Adding registry tweaks to enable RunOnceEx for install SPECIAL Updates...
echo.

REG LOAD HKLM\Slipstream "%WIM%\Windows\System32\Config\Software" >nul
SET ROE=HKLM\Slipstream\Microsoft\Windows\CurrentVersion\RunOnceEx

REG ADD %ROE% /v TITLE /d "Installing updates..." /f >nul
REG ADD %ROE% /v Flags /t REG_DWORD /d "00000014" /f >nul
REG ADD %ROE% /d "%WinDir%\System32\rundll32.exe %WinDir%\System32\iernonce.dll,RunOnceExProcess" /f >nul

cd SpecialUpdates

set /a NUM=0
set SWITCH=/q
if not exist "%WIM%\Windows\Setup\Updates" mkdir "%WIM%\Windows\Setup\Updates" >nul
FOR %%f IN ("*.*") DO (
set /a ROENUM=!NUM!*5
If !ROENUM! LSS 10 (set "ROESTR=00!ROENUM!") ELSE (
If !ROENUM! LSS 100 (set "ROESTR=0!ROENUM!") ELSE (
set "ROESTR=!ROENUM!"))

copy /Y "%%f" "%WIM%\Windows\Setup\Updates" >nul
REG ADD %ROE%\!ROESTR! /ve /d "%%f" /f >nul
if "%%f" == "DirectX*.exe" (set SWITCH=/Q /T:\"%WinDir%\Setup\Updates\DX\" /C:\"%WinDir%\Setup\Updates\DX\dxsetup.exe /silent\"
set DirectX=1
)
REG ADD %ROE%\!ROESTR! /v %%f /d "%WinDir%\Setup\Updates\%%f %SWITCH%" /f >nul
if "%DirectX%" == "1" set SWITCH=/q
set /a NUM+=1
)

REG ADD %ROE%\999 /ve /d "Cleaning up..." /f >nul
REG ADD %ROE%\999 /v CMD /d "cmd.exe /q /c RmDir /S /Q \"%WinDir%\Setup\Updates\"" /f >nul
echo.
pause
REG UNLOAD HKLM\Slipstream >nul
cd..

Link to comment
Share on other sites

There were a couple reasons it wasn't working, but let's start with the following new code. The relevant portions have been tested as working here, so it should work for you as well.

SETLOCAL EnableDelayedExpansion

echo.
echo Adding registry tweaks to enable RunOnceEx for install SPECIAL Updates...
echo.

REG LOAD HKLM\Slipstream "%WIM%\Windows\System32\Config\Software" >nul
SET ROE=HKLM\Slipstream\Microsoft\Windows\CurrentVersion\RunOnceEx

REG ADD %ROE% /v TITLE /d "Installing updates..." /f >nul
REG ADD %ROE% /v Flags /t REG_DWORD /d "00000014" /f >nul
REG ADD %ROE% /d "%WinDir%\System32\rundll32.exe %WinDir%\System32\iernonce.dll,RunOnceExProcess" /f >nul

cd SpecialUpdates

set /a NUM=0
if not exist "%WIM%\Windows\Setup\Updates" mkdir "%WIM%\Windows\Setup\Updates" >nul
FOR %%f IN ("*.*") DO (
set /a ROENUM=!NUM!*5
If !ROENUM! LSS 10 (set "ROESTR=00!ROENUM!") ELSE (
If !ROENUM! LSS 100 (set "ROESTR=0!ROENUM!") ELSE (
set "ROESTR=!ROENUM!"))

copy /Y "%%f" "%WIM%\Windows\Setup\Updates" >nul
REG ADD %ROE%\!ROESTR! /ve /d "%%f" /f >nul

set "SWITCH=/q"
set "FILENAMECHECK=%%f"
if /I "!FILENAMECHECK:~0,7!"=="DirectX" (
if /I "!FILENAMECHECK:~-4!"==".exe" (
set "SWITCH=/Q /T:\"%WinDir%\Setup\Updates\DX\" /C:\"%WinDir%\Setup\Updates\DX\dxsetup.exe /silent\""))

REG ADD %ROE%\!ROESTR! /v "%%f" /d "%WinDir%\Setup\Updates\%%f !SWITCH!" /f >nul
set /a NUM+=1
)

REG ADD %ROE%\999 /ve /d "Cleaning up..." /f >nul
REG ADD %ROE%\999 /v CMD /d "cmd.exe /q /c RmDir /S /Q \"%WinDir%\Setup\Updates\"" /f >nul
echo.
pause
REG UNLOAD HKLM\Slipstream >nul
cd..

Now for the reasons it wasn't working:

  1. if "%%f" == "DirectX*.exe"
    • File names cannot be checked in this way. Asterisks (*) will not be interpreted as wildcards. It was necessary to translate this into a form that can be used in a CMD script. To do this a temporary variable, FILENAMECHECK, was created. Then,
    substrings of that variable were compared against the strings we're looking for; namely "DirectX" at the beginning and ".exe" at the end. An examination of the code above should show specifically how this is done.

[*]REG ADD %ROE%\!ROESTR! /v %%f /d "%WinDir%\Setup\Updates\%%f %SWITCH%" /f >nul

  • Variables that change in a loop and are also expanded in that same loop must be local variables. That means "%SWITCH%" must become "!SWITCH!".

By moving "set SWITCH=/q", I also simplified the script. The variable DirectX as it was used is no longer necessary.

Edited by 5eraph
Link to comment
Share on other sites

Thanks, i modded to look like this, but the setting NAME not working, can you tell me why please?

SETLOCAL EnableDelayedExpansion

echo.
echo Adding registry tweaks to enable RunOnceEx for install SPECIAL Updates...
echo.

REG LOAD HKLM\Slipstream "%WIM%\Windows\System32\Config\Software" >nul
SET ROE=HKLM\Slipstream\Microsoft\Windows\CurrentVersion\RunOnceEx

REG ADD %ROE% /v TITLE /d "Installing updates..." /f >nul
REG ADD %ROE% /v Flags /t REG_DWORD /d "00000014" /f >nul
REG ADD %ROE% /d "%WinDir%\System32\rundll32.exe %WinDir%\System32\iernonce.dll,RunOnceExProcess" /f >nul

cd SpecialUpdates

set /a NUM=0
if not exist "%WIM%\Windows\Setup\Updates" mkdir "%WIM%\Windows\Setup\Updates" >nul
FOR %%f IN ("*.*") DO (
set /a ROENUM=!NUM!*5
If !ROENUM! LSS 10 (set "ROESTR=00!ROENUM!") ELSE (
If !ROENUM! LSS 100 (set "ROESTR=0!ROENUM!") ELSE (
set "ROESTR=!ROENUM!"))

copy /Y "%%f" "%WIM%\Windows\Setup\Updates" >nul
REG ADD %ROE%\!ROESTR! /ve /d "%%f" /f >nul

set "SWITCH=/q"
set "FILENAMECHECK=%%f"

if /I "!FILENAMECHECK:~0,7!"=="DirectX" (
if /I "!FILENAMECHECK:~-4!"==".exe" (
set "SWITCH=/Q /T:\"%WinDir%\Setup\Updates\DX\" /C:\"%WinDir%\Setup\Updates\DX\dxsetup.exe /silent\""
set "NAME=DirectX SDK"))

if /I "!FILENAMECHECK:~0,15!"=="GamesForWindows" (
if /I "!FILENAMECHECK:~-4!"==".exe" (
set "NAME=Games for Windows - LIVE"))

if /I "!FILENAMECHECK:~0,11!"=="PlayReadyPC" (
if /I "!FILENAMECHECK:~-4!"==".msi" (
set "SWITCH=/quiet /norestart"
set "NAME=PlayReady PC Runtime"))

if /I "!FILENAMECHECK:~0,11!"=="Silverlight" (
if /I "!FILENAMECHECK:~-4!"==".exe" (
set "NAME=Microsoft Silverlight"))

if /I "!FILENAMECHECK:~0,16!"=="windows-kb890830" (
if /I "!FILENAMECHECK:~-4!"==".exe" (
set "NAME=Malicious Software Removal Tool"))

if /I "!FILENAMECHECK:~0,7!"=="wlsetup" (
if /I "!FILENAMECHECK:~-4!"==".exe" (
set "SWITCH=/silent"
set "NAME=Windows Live Essentials"))

REG ADD %ROE%\!ROESTR! /v "!NAME!" /d "%WinDir%\Setup\Updates\%%f !SWITCH!" /f >nul
set /a NUM+=1
)

REG ADD %ROE%\999 /ve /d "Cleaning up..." /f >nul
REG ADD %ROE%\999 /v CMD /d "cmd.exe /q /c RmDir /S /Q \"%WinDir%\Setup\Updates\"" /f >nul
echo.
REG UNLOAD HKLM\Slipstream >nul
cd..

EDIT: I forget move REG ADD %ROE%\!ROESTR! /ve /d "%%f" /f >nul down and change %%f to !NAME!. I will try, maybe it will work ;)

Edited by George King
Link to comment
Share on other sites

I'm sorry for the delay. I've been away.

It looks like NAME should work in your revised code for the instances where you have it defined. The only problem I see is when files are found that don't match your file name checks. This is easily solved with a single line of code, set "NAME=%%f", in the right place as shown in the new code below.

Also, most of the files we are looking for end with ".exe". The If statements can be rearranged to simplify the code by writing the check for ".exe" only once. This makes the code far more efficient when a file does not end with ".exe" by reducing the number of checks these files need to go through.

EDIT: I forgot to make the changes you mentioned in your last reply. Fixed.

SETLOCAL EnableDelayedExpansion

echo.
echo Adding registry tweaks to enable RunOnceEx for install SPECIAL Updates...
echo.

REG LOAD HKLM\Slipstream "%WIM%\Windows\System32\Config\Software" >nul
SET ROE=HKLM\Slipstream\Microsoft\Windows\CurrentVersion\RunOnceEx

REG ADD %ROE% /v TITLE /d "Installing updates..." /f >nul
REG ADD %ROE% /v Flags /t REG_DWORD /d "00000014" /f >nul
REG ADD %ROE% /d "%WinDir%\System32\rundll32.exe %WinDir%\System32\iernonce.dll,RunOnceExProcess" /f >nul

cd SpecialUpdates

set /a NUM=0
if not exist "%WIM%\Windows\Setup\Updates" mkdir "%WIM%\Windows\Setup\Updates" >nul
FOR %%f IN ("*.*") DO (
set /a ROENUM=!NUM!*5
If !ROENUM! LSS 10 (set "ROESTR=00!ROENUM!") ELSE (
If !ROENUM! LSS 100 (set "ROESTR=0!ROENUM!") ELSE (
set "ROESTR=!ROENUM!"))

copy /Y "%%f" "%WIM%\Windows\Setup\Updates" >nul

set "SWITCH=/q"
set "NAME=%%f"
set "FILENAMECHECK=%%f"

if /I "!FILENAMECHECK:~-4!"==".exe" (

if /I "!FILENAMECHECK:~0,7!"=="DirectX" (
set "SWITCH=/Q /T:\"%WinDir%\Setup\Updates\DX\" /C:\"%WinDir%\Setup\Updates\DX\dxsetup.exe /silent\""
set "NAME=DirectX SDK")

if /I "!FILENAMECHECK:~0,15!"=="GamesForWindows" (
set "NAME=Games for Windows - LIVE")

if /I "!FILENAMECHECK:~0,11!"=="Silverlight" (
set "NAME=Microsoft Silverlight")

if /I "!FILENAMECHECK:~0,16!"=="windows-kb890830" (
set "NAME=Malicious Software Removal Tool")

if /I "!FILENAMECHECK:~0,7!"=="wlsetup" (
set "SWITCH=/silent"
set "NAME=Windows Live Essentials")
)

if /I "!FILENAMECHECK:~0,11!"=="PlayReadyPC" (
if /I "!FILENAMECHECK:~-4!"==".msi" (
set "SWITCH=/quiet /norestart"
set "NAME=PlayReady PC Runtime"))

REG ADD %ROE%\!ROESTR! /ve /d "!NAME!" /f >nul
REG ADD %ROE%\!ROESTR! /v "!NAME!" /d "%WinDir%\Setup\Updates\%%f !SWITCH!" /f >nul
set /a NUM+=1
)

REG ADD %ROE%\999 /ve /d "Cleaning up..." /f >nul
REG ADD %ROE%\999 /v CMD /d "cmd.exe /q /c RmDir /S /Q \"%WinDir%\Setup\Updates\"" /f >nul
echo.
REG UNLOAD HKLM\Slipstream >nul
cd..

Edited by 5eraph
Link to comment
Share on other sites

  • 1 month later...

Ok, can you again help me please? I need add "fix" which will skip HTML and TXT files. Can you help me? I dont know how i can figure it...

set /a NUM=0
if not exist "%WIM%\Windows\Setup\Updates" mkdir "%WIM%\Windows\Setup\Updates" >nul
FOR %%f IN ("*.*") DO (
set /a ROENUM=!NUM!*5
If !ROENUM! LSS 10 (set "ROESTR=00!ROENUM!") ELSE (
If !ROENUM! LSS 100 (set "ROESTR=0!ROENUM!") ELSE (
set "ROESTR=!ROENUM!"))

set "SWITCH=/q"
set "NAME=%%f"
set "FILENAMECHECK=%%f"

if /I "!FILENAMECHECK:~-4!"==".exe" (

if /I "!FILENAMECHECK:~0,7!"=="DirectX" (
set "SWITCH=/Q /T:\"%WinDir%\Setup\Updates\DX\" /C:\"%WinDir%\Setup\Updates\DX\dxsetup.exe /silent\""
set "NAME=DirectX Redistributable")

if /I "!FILENAMECHECK:~0,15!"=="GamesForWindows" (
set "NAME=Games for Windows - LIVE")

if /I "!FILENAMECHECK:~0,11!"=="Silverlight" (
set "NAME=Microsoft Silverlight")

if /I "!FILENAMECHECK:~0,16!"=="windows-kb890830" (
set "NAME=Malicious Software Removal Tool")

if /I "!FILENAMECHECK:~0,7!"=="wlsetup" (
set "SWITCH=/silent"
set "NAME=Windows Live Essentials")

if /I "!FILENAMECHECK:~0,8!"=="rootsupd" (
set "NAME=Root Certificates Update")

if /I "!FILENAMECHECK:~0,4!"=="msse" (
set "MSSE=1"
set "NAME=Microsoft Security Essentials"
"%%f" /Q /X:"%WIM%\Windows\Updates\MSSE"
set "SWITCH=MSSE\setup.exe /s /runwgacheck /o")
)

if /I "!FILENAMECHECK:~0,11!"=="PlayReadyPC" (
if /I "!FILENAMECHECK:~-4!"==".msi" (
set "SWITCH=/quiet /norestart"
set "NAME=PlayReady PC Runtime"))

if /I "!MSSE!"=="1" (REG ADD %ROE%\!ROESTR! /ve /d "!NAME!" /f >nul
REG ADD %ROE%\!ROESTR! /v "!NAME!" /d "%WinDir%\Setup\Updates\!SWITCH!" /f >nul) ELSE (REG ADD %ROE%\!ROESTR! /ve /d "!NAME!" /f >nul
REG ADD %ROE%\!ROESTR! /v "!NAME!" /d "%WinDir%\Setup\Updates\%%f !SWITCH!" /f >nul)
copy /Y "%%f" "%WIM%\Windows\Setup\Updates" >nul

set /a NUM+=1
)

Link to comment
Share on other sites

We can nest most of the code within a couple more If statements to skip TXT and HTML files:

if /I NOT "!FILENAMECHECK:~-4!"==".txt" (
if /I NOT "!FILENAMECHECK:~-5!"==".html" (

I also simplified your Microsoft Security Essentials file processing using the variable !SETUPPATH!, which allows you to make similar adjustments to files you may add in the future.

Here is the final code with all modifications. It is untested.

set /a NUM=0
if not exist "%WIM%\Windows\Setup\Updates" mkdir "%WIM%\Windows\Setup\Updates" >nul
FOR %%f IN ("*.*") DO (
set "FILENAMECHECK=%%f"
if /I NOT "!FILENAMECHECK:~-4!"==".txt" (
if /I NOT "!FILENAMECHECK:~-5!"==".html" (

set /a ROENUM=!NUM!*5
If !ROENUM! LSS 10 (set "ROESTR=00!ROENUM!") ELSE (
If !ROENUM! LSS 100 (set "ROESTR=0!ROENUM!") ELSE (
set "ROESTR=!ROENUM!"))

set "SWITCH=/q"
set "NAME=%%f"
set "SETUPPATH=%%f"

if /I "!FILENAMECHECK:~-4!"==".exe" (

if /I "!FILENAMECHECK:~0,7!"=="DirectX" (
set "SWITCH=/Q /T:\"%WinDir%\Setup\Updates\DX\" /C:\"%WinDir%\Setup\Updates\DX\dxsetup.exe /silent\""
set "NAME=DirectX Redistributable")

if /I "!FILENAMECHECK:~0,15!"=="GamesForWindows" (
set "NAME=Games for Windows - LIVE")

if /I "!FILENAMECHECK:~0,11!"=="Silverlight" (
set "NAME=Microsoft Silverlight")

if /I "!FILENAMECHECK:~0,16!"=="windows-kb890830" (
set "NAME=Malicious Software Removal Tool")

if /I "!FILENAMECHECK:~0,7!"=="wlsetup" (
set "SWITCH=/silent"
set "NAME=Windows Live Essentials")

if /I "!FILENAMECHECK:~0,8!"=="rootsupd" (
set "NAME=Root Certificates Update")

if /I "!FILENAMECHECK:~0,4!"=="msse" (
set "NAME=Microsoft Security Essentials"
"%%f" /Q /X:"%WIM%\Windows\Updates\MSSE"
set "SETUPPATH=MSSE\setup.exe"
set "SWITCH=/s /runwgacheck /o")
)

if /I "!FILENAMECHECK:~-4!"==".msi" (
if /I "!FILENAMECHECK:~0,11!"=="PlayReadyPC" (
set "SWITCH=/quiet /norestart"
set "NAME=PlayReady PC Runtime"))

REG ADD %ROE%\!ROESTR! /ve /d "!NAME!" /f >nul
REG ADD %ROE%\!ROESTR! /v "!NAME!" /d "%WinDir%\Setup\Updates\!SETUPPATH! !SWITCH!" /f >nul

If /I "!SETUPPATH!"=="%%f" (copy /Y "%%f" "%WIM%\Windows\Setup\Updates")>nul

set /a NUM+=1
)) )

Edited by 5eraph
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...