Jump to content

5eraph

Members
  • Posts

    44
  • Joined

  • Last visited

  • Days Won

    1

Reputation Activity

  1. Like
    5eraph reacted to ricktendo in Windows 7 Hotfix repository   
    Source: My Digital Life Forums
  2. Like
    5eraph got a reaction from George King in CMD script not working - FOR issue?   
    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.
  3. Like
    5eraph got a reaction from George King in CMD script not working - FOR issue?   
    That code converts the number of the file it is working on into a proper string to be used for your registry entries.

    First, the file number (starting at zero) is multiplied by 5, then saved as ROENUM by the SET command.
    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
    ..

  4. Like
    5eraph got a reaction from George King in CMD script not working - FOR issue?   
    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:

    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.
  5. Like
    5eraph got a reaction from George King in CMD script not working - FOR issue?   
    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..
×
×
  • Create New...