Skip to content
View in the app

A better way to browse. Learn more.

MSFN

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Easy Renaming Hotfix files to KBXXXXXX.exe

Featured Replies

Hello,

I have not posted much, but I have enjoyed all the information about making unattended Windows CD's here.

I was annoyed at renaming the KBXXXXXX.exe files to update my svpack.inf file

I wrote a little perl script to auto rename files once you download them. I know most of you

already probably had a solution to this. I am just starting perl so if you find any better to the solutions or suggestions

feel free to comment. Hope this may help some one.

kypumper

#!C:\PERL -w
############################################################################
#### Written by kypumper feel free to modify or comment ####################
#### email suggestions to kyumper+msfn@gmail.com ###########################
############################################################################
$i=0,

#############################################################################
### uncomment the chdir function if you want to specify a dir where you hotfix files are located otherwise run this ###
### script in the same dir as your hotfix files. ############
#############################################################################
#chdir ("New Ones") || die "cannot change dir: ($!)";
@oldfiles = glob "Windows*.*";


##############################################################################
### This Loop matches files that match "KB and have digits that follow" ######
### then extracts just that part of the filename so the oldfiles array can ##
### be renamed with the newfiles array. ######################################
##############################################################################
foreach (@oldfiles) {
$_ =~ /(KB[\d]+)/;
$newfiles[$i] = "$1.exe";

##### Testing to see if file exists ########
if (-e $newfiles[$i]) {
warn "Can't rename $oldfiles[$i] to $newfiles[$i] exists \n"; }


##### Renaming File and printing a success indication ###########
elsif (rename $oldfiles[$i], $newfiles[$i]) {
print "Renaming $oldfiles[$i] to $newfiles[$i] \n";
}

##### Warning if program cannot rename files ######
else { warn "rename $oldfiles[$i] to $newfiles[$i] failed: ($!) \n";
}


### Increments thru the arrays ######
$i++;
### End of foreach loop #############
}


#### Warns if No Files were parsed ############
$match=@newfiles;
if ($match < 1) {
print"No Files Matched to parse! \n";
}


I have never used a perl script but here a VBS script that will rename the KB

Save As ReNameKB.vbs

On Error Resume Next 
Const OverwriteExisting = True
Dim Fso : Set Fso = CreateObject("Scripting.FileSystemObject")
'/-> If You Are Running The Script In The Same Folder
Dim Folder : Set Folder = Fso.GetFolder(Fso.GetParentFolderName(WScript.ScriptFullName))
'/-> If You Want To Add A Full Path Comment Out The Above And Use Below In Between The Quotes
'Dim Folder : Set Folder = Fso.GetFolder("PLACE_A_FULL_PATH_HERE_TO_THE_FOLDER_WHERE_THE_KB_ARE_LOCATED")
Dim File : Set File = Folder.Files
Dim Rn1,StrF
'/-> CHECK AND REMOVE LONNGNAMES FROM UPDATES
For Each StrF In File
If InStr(StrF.Path,"KB") Or InStr(StrF.Path,"Kb") Or InStr(StrF.Path,"kb") Then
If InStr(StrF.Name,"-") Then
Rn1 = Split(StrF.Name,"-")
Fso.CopyFile(StrF.Name),(Rn1(1) & ".exe"),OverwriteExisting
Fso.DeleteFile(StrF.Path)
End If
End If
Next

Edited by gunsmokingman

  • Author

that script you wrote is much shorter than mine.

I can update my script to automaticaaly generate the svcpack.inf file also

if anyone would be interested.

Edited by KYPUMPER

Well before it gets even more complicated, here's a batch file version.

@ECHO OFF
SETLOCAL
FOR /F "DELIMS=" %%? IN ('DIR/B/A-D *KB*.EXE') DO CALL :GI_ %%?
GOTO :EOF
:GI_
SET "N_=%1"
:LP_
SET "N_=%N_:*-=%"
ECHO/%N_%|FINDSTR/I "KB[0-9]*">NUL||GOTO LP_
SET "N_=%N_:~0,8%.exe"
IF NOT EXIST %N_% REN %1 %N_%
GOTO :EOF

ha! ha! really great guys to have 3 different approaches to this :) i'm certain lots will benefit from these ...

Well before it gets even more complicated, here's a batch file version.
@ECHO OFF
SETLOCAL
FOR /F "DELIMS=" %%? IN ('DIR/B/A-D *KB*.EXE') DO CALL :GI_ %%?
GOTO :EOF
:GI_
SET "N_=%1"
:LP_
SET "N_=%N_:*-=%"
ECHO/%N_%|FINDSTR/I "KB[0-9]*">NUL||GOTO LP_
SET "N_=%N_:~0,8%.exe"
IF NOT EXIST %N_% REN %1 %N_%
GOTO :EOF

B)

Here is a VBS Script I wrote because I was bored it will Rename the KB in any folder on the computer.

Since this is a WMI VBS Script it can be ran across networks to Rename the Updates.

To Run this against a Network Computer

Change This

Dim StrC :StrC = "."

To This

Dim StrC :StrC = "A_IP_ADDRESS_OR_COMPUTERNAME_ON_THE_NETWORK"

Save As RenameKB_V1.vbs

Const OverwriteExisting = True 
Dim StrC :StrC = "."
Dim Wmi :Set Wmi = GetObject("winmgmts:\\" & strC & "\root\cimv2")
Dim Fso :Set Fso = CreateObject("Scripting.FileSystemObject")
Dim File, KB1, KB2, KB3, StrF
Set File = Wmi.ExecQuery(_
"Select * from CIM_DataFile WHERE FileName LIKE 'WindowsXP-KB%%%%%%' And Extension = 'exe'")
For Each StrF In File
Set KB1 = Fso.GetFile(StrF.Name)
KB2 = Split(KB1.Name,"-")
KB3 = Fso.GetParentFolderName(KB1.Path) & "\" & KB2(1) & ".exe"
Fso.CopyFile(KB1.Path),(KB3),OverwriteExisting
Next

This one I added a message box that will report either no files where Renamed or how many where Renamed.

Save As RenameKB_V2.vbs

Const OverwriteExisting = True 
Dim StrC :StrC = "."
Dim Wmi :Set Wmi = GetObject("winmgmts:\\" & strC & "\root\cimv2")
Dim Fso :Set Fso = CreateObject("Scripting.FileSystemObject")
Dim Act :Set Act = CreateObject("Wscript.Shell")
Dim File, KB1, KB2, KB3, StrF
Set File = Wmi.ExecQuery(_
"Select * from CIM_DataFile WHERE FileName LIKE 'WindowsXP-KB%%%%%%' And Extension = 'exe'")
For Each StrF In File
Set KB1 = Fso.GetFile(StrF.Name)
KB2 = Split(KB1.Name,"-")
KB3 = Fso.GetParentFolderName(KB1.Path) & "\" & KB2(1) & ".exe"
Fso.CopyFile(KB1.Path),(KB3),OverwriteExisting
Next
If File.Count = 0 Then
Act.Popup "There Where No Updates Found To Rename",9,"No Updates",4128
Else
Act.Popup "Completed Rename Of Updates" & vbCrLf & _
"This Many Updates where Rename : " & File.Count,9,"Rename KB",4128
End If

Yzöwl nice batch file :thumbup

Thanks.

There is of course a small mistake in it, more to do with input checking than anything else, but I couldn't be bothered changing it.

Why...

Because I wanted to have the 'smallest looking script' on offer without concatenating lines, and that change would have made it look a little bit longer!

Yzöwl, I ran into some issues with it the other day. First off, it doesn't behave nicely with hotfixes named IE7-WindowsXP-KBxxx. I ended up a file named WindowsX.exe. Second, is it possible the code you posted doesn't always handle multiple EXEs properly? I ran it in a dir with 5 or 6 hotfixes in it and it properly renamed the first EXE just fine, but it didn't touch the rest.

Basically, I've adapted your code with some code to go through a directory and expand all the hotfixes after renaming them, so I can run the batch file in a directory of standard as-downloaded EXEs and be left with a nice directory of KBxxxxxx folders instead :)

You are intent on me making this thing bigger aren't you?

I will take a look at improving this thing as soon as I get a little time.

As far as the multiple EXEs go, there shouldn't be a problem, my initial test, (singular), seemed okay, but there was no 'real' testing done on it. I'll give the tidied version a go first and test it a little before reposting it here.

Yzöwl, I ran into some issues with it the other day. First off, it doesn't behave nicely with hotfixes named IE7-WindowsXP-KBxxx. I ended up a file named WindowsX.exe. Second, is it possible the code you posted doesn't always handle multiple EXEs properly? I ran it in a dir with 5 or 6 hotfixes in it and it properly renamed the first EXE just fine, but it didn't touch the rest.

Basically, I've adapted your code with some code to go through a directory and expand all the hotfixes after renaming them, so I can run the batch file in a directory of standard as-downloaded EXEs and be left with a nice directory of KBxxxxxx folders instead :)

Try this script it should work, it will Rename any updates on any drive or folder on the local computer.

This can be run from your desktop.

Const OverwriteExisting = True 
Dim StrC :StrC = "."
Dim Wmi :Set Wmi = GetObject("winmgmts:\\" & strC & "\root\cimv2")
Dim Fso :Set Fso = CreateObject("Scripting.FileSystemObject")
Dim Act :Set Act = CreateObject("Wscript.Shell")
Dim File, KB1, KB2, KB3, StrF
Set File = Wmi.ExecQuery(_
"Select * from CIM_DataFile WHERE FileName LIKE '%-KB%%%%%%' And Extension = 'exe'")
For Each StrF In File
Set KB1 = Fso.GetFile(StrF.Name)
KB2 = Split(KB1.Name,"-")
KB3 = Fso.GetParentFolderName(KB1.Path) & "\" & KB2(1) & ".exe"
Fso.CopyFile(KB1.Path),(KB3),OverwriteExisting
Next
If File.Count = 0 Then
Act.Popup "There Where No Updates Found To Rename",9,"No Updates",4128
Else
Act.Popup "Completed Rename Of Updates" & vbCrLf & _
"This Many Updates where Rename : " & File.Count,9,"Rename KB",4128
End If

Create an account or sign in to comment

Recently Browsing 0

  • No registered users viewing this page.

Account

Navigation

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.