Leaderboard
Popular Content
Showing content with the highest reputation on 01/24/2010 in all areas
-
Add my icon into program in C/C++
George King reacted to NIM for a topic
You can add such an icon by creating a .rc file and add that one to your project. Make sure that the icon file (.ico) resides in the same directory. That .rc file (myapp.rc) looks like.1 point -
CMD script not working - FOR issue?
George King reacted to 5eraph for a topic
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..1 point -
CMD script not working - FOR issue?
George King reacted to 5eraph for a topic
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.1 point -
CMD script not working - FOR issue?
George King reacted to 5eraph for a topic
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 ..1 point -
CMD script not working - FOR issue?
George King reacted to 5eraph for a topic
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.1 point -
1 point