(view source code of allhelp.vbs as plain text)
Option ExplicitDim arrHelpWin, arrHelpWinChr1, arrIntCmd, arrTemp, dicHelpLong, dicHelpShort, dicSystemFilesDim blnAdditional, blnDebug, blnDebugLog, blnIgnoreBatch, blnNoAdmin, blnNohlpChr1, blnOverwrite, blnQuiet, blnWindowsOnlyDim intBitsOS, intCodePage, intOSVersion, intUnexpectedCodepage, intValidArgs, i, jDim colItems, objDebugLog, objExec, objHTMLFile, objFolderDim objFolderItem, objFSO, objItem, objKey, objMatches, objMatches2Dim objRE, objShell, objWMISvc, wshShellDim strAlphabet, strArg, strClass, strCmdInfo, strCommand, strCommandLine, strComSpec, strCSDVer, strFile, strFileVerDim strDebugLog, strFirstLetter, strHelpAll, strHelpLong, strHelpShort, strHead, strHTML, strMsg, strNumVerDim strOSLocl, strPattern, strPreviousLetter, strScriptEngine, strScriptPath, strScriptVer, strUnknownCommand, strWinVerConst INTERNAL_COMMON = "BREAK CALL CD CHCP CHDIR CLS COPY DATE DEL DIR DPATH ECHO ERASE EXIT FOR GOTO IF MD MKDIR MOVE PATH PAUSE PROMPT RD REM REN RENAME RMDIR SET SHIFT TIME TYPE VER VERIFY VOL"
Const INTERNAL_CMD_EXE = "ASSOC COLOR ENDLOCAL FTYPE MKLINK POPD PUSHD SETLOCAL START TITLE"
Const INTERNAL_COMMAND_COM = "CTTY LFNFOR LH LOADHIGH LOCK TRUENAME UNLOCK"
Const MY_DOCUMENTS = &H5
Const dictKey = 1
Const dictItem = 2
Const TristateFalse = 0
Const TristateMixed = -2
Const TristateTrue = -1
Const TristateUseDefault = -2
Const ForAppending = 8
Const ForReading = 1
Const ForWriting = 2
Set objFSO = CreateObject( "Scripting.FileSystemObject" )
Set wshShell = CreateObject( "Wscript.Shell" )
strDebugLog = ""
strMsg = ""
strScriptVer = "3.29"
intValidArgs = 0
blnAdditional = False
blnIgnoreBatch = True
blnDebug = False
blnDebugLog = False
blnNoAdmin = False
blnOverwrite = False
blnQuiet = False
blnWindowsOnly = False
intCodePage = GetCodePage( )
intUnexpectedCodepage = 0
With WScript.Arguments
If .Named.Exists( "BAT" ) Then
blnIgnoreBatch = False
intValidArgs = intValidArgs + 1
End If
If .Named.Exists( "NOADMIN" ) Then
blnNoAdmin = True
intValidArgs = intValidArgs + 1
End If
If .Named.Exists( "WHO" ) Then
blnWindowsOnly = True
intValidArgs = intValidArgs + 1
End If
If .Named.Exists( "Q" ) Then
blnQuiet = True
intValidArgs = intValidArgs + 1
ElseIf .Named.Exists( "DEBUG" ) Then
blnDebug = True
intValidArgs = intValidArgs + 1
strDebugLog = .Named.Item( "DEBUG" )
If strDebugLog = "" Then
blnDebugLog = False
ElseIf objFSO.FolderExists( objFSO.GetParentFolderName( strDebugLog ) ) Then
blnDebugLog = True
Set objDebugLog = objFSO.OpenTextFile( strDebugLog, ForWriting, True, TristateUseDefault )
ElseblnDebugLog = False
End If
End If
DebugDisplay "Show intermediate results"If blnDebugLog Then
DebugDisplay "Logging to """ & strDebugLog & """"
End If
End If
If .Named.Exists( "NOADMIN" ) Then
If blnDebug Then DebugDisplay "Script restarted with elevated privileges"
End If
If .Named.Exists( "BAT" ) Then
If blnDebug Then DebugDisplay "Include batch files (.bat and .cmd)"
ElseIf blnDebug Then DebugDisplay "Ignore batch files (.bat and .cmd)"
End If
If .Named.Exists( "WHO" ) Then
If blnDebug Then DebugDisplay "Show commands listed by HELP only"
ElseIf blnDebug Then DebugDisplay "Show ""all"" commands"
End If
If .Named.Exists( "Y" ) Then
blnOverwrite = True
intValidArgs = intValidArgs + 1
If blnDebug Then DebugDisplay "HTML file overwrite ON"
ElseIf blnDebug Then DebugDisplay "HTML file overwrite OFF"
End If
If .Unnamed.Count > 0 Then
strFile = .Unnamed(0)
intValidArgs = intValidArgs + 1
If blnDebug Then DebugDisplay "Output HTML file: " & strFile
Else ' Find the path to "My Documents"Set objShell = CreateObject( "Shell.Application" )
Set objFolder = objShell.Namespace( MY_DOCUMENTS )
Set objFolderItem = objFolder.Self
strFile = objFSO.BuildPath( objFolderItem.Path, "allhelp.html" )
If blnDebug Then DebugDisplay "Output HTML file: " & strFile
Set objFolderItem = Nothing
Set objFolder = Nothing
Set objShell = Nothing
End If
If objFSO.FileExists( strFile ) And Not blnOverwrite Then
strMsg = strMsg & "ERROR: The specified output file exists and file overwrite is OFF" & vbCrLf & vbCrLf
Syntax
End If
If objFSO.FolderExists( strFile ) Then
strMsg = strMsg & "ERROR: A folder with the name of the specified output file exists" & vbCrLf & vbCrLf
Syntax
End If
If Not objFSO.FolderExists( objFSO.GetParentFolderName( strFile ) ) Then
strMsg = strMsg & "ERROR: The parent folder for the specified output file does not exists" & vbCrLf & vbCrLf
Syntax
End If
End If
If intValidArgs <> .Count Then
strMsg = strMsg & "ERROR: Invalid command line arguments" & vbCrLf & vbCrLf
Syntax
End If
End With
' Get the script engine, path and argumentsstrScriptEngine = WScript.FullName
strScriptPath = WScript.ScriptFullName
strCommandLine = ""
For Each strArg In WScript.Arguments
strCommandLine = Trim( strCommandLine & " " & strArg )
Next' Check for elevated privilegesIf IsAdmin( ) Then
If blnDebug Then DebugDisplay "Elevated privileges"
ElseIf blnDebug Then DebugDisplay "No elevated privileges"
End If
' Get the OS versionSet objWMISvc = GetObject( "winmgmts://./root/cimv2" )
Set colItems = objWMISvc.ExecQuery( "SELECT * FROM Win32_OperatingSystem", , 48 )
For Each objItem in colItems
strWinVer = objItem.Caption
strCSDVer = objItem.CSDVersion
strOSLocl = objItem.OSLanguage
strNumVer = objItem.Version
Next' Check if OS is 32-bit or 64-bitSet colItems = objWMISvc.ExecQuery( "SELECT * FROM Win32_Processor", , 48 )
For Each objItem in colItems
intBitsOS = CInt( objItem.AddressWidth )
NextSet colItems = Nothing
Set objWMISvc = Nothing
' Determine the list of internal commands, based on the command processor (COMMAND.COM or CMD.EXE)Set arrIntCmd = CreateObject( "System.Collections.Sortedlist" )
strComSpec = UCase( wshShell.ExpandEnvironmentStrings( "%COMSPEC%" ) )
arrTemp = Split( INTERNAL_COMMON )
For i = 0 To UBound( arrTemp )
arrIntCmd.Add arrTemp(i), arrTemp(i)
NextarrTemp = NullIf Right( strComSpec, 12 ) = "\COMMAND.COM" Then
arrTemp = Split( INTERNAL_COMMAND_COM )
ElseIf Right( strComSpec, 8 ) = "\CMD.EXE" Then
arrTemp = Split( INTERNAL_CMD_EXE )
End If
End If
For i = 0 To UBound( arrTemp )
arrIntCmd.Add arrTemp(i), arrTemp(i)
Next' Change the working directory to %windir%\system32Set objShell = CreateObject( "Wscript.Shell" )
objShell.CurrentDirectory = wshShell.ExpandEnvironmentStrings( "%windir%\system32" )
' Retrieve the error message for unknown commands, i.e. what string to look for to detect errorsstrUnknownCommand = GetCommandError( )
' Create a Dictionary objects to contain the commands and associated help textsSet dicHelpLong = CreateObject( "Scripting.Dictionary" )
Set dicHelpShort = CreateObject( "Scripting.Dictionary" )
Set dicSystemFiles = CreateObject( "Scripting.Dictionary" )
Set arrHelpWin = CreateObject( "System.Collections.ArrayList" )
Set arrHelpWinChr1 = CreateObject( "System.Collections.ArrayList" )
' Store all descriptions for files in %windir%\system32 in a dictionary for later use by GetFileDescription function.' This speeds up this script enormously, when combined with a check in this dictionary first in GetFileDescription.GetSystemFileDescriptions
' Fill the commands listsSet objExec = wshShell.Exec( "CMD.EXE /A /C (TITLE AllHelp " & strScriptVer & ": HELP&HELP)" )
strHelpAll = objExec.StdOut.ReadAll( )
objExec.Terminate
Set objExec = Nothing
Set objRE = New RegExp
objRE.Global = True
objRE.IgnoreCase = False
objRE.Pattern = "(^|[\n\r])[A-Z]+ +([^\n\r]+)(\r\n +([^\n\r]+))*"
Set objMatches = objRE.Execute( strHelpAll )
For i = 0 To objMatches.Count - 1
strCommand = Mid( objMatches.Item(i), 2, InStr( objMatches.Item(i), " " ) - 2 )
strHelpShort = SuperTrim( Mid( objMatches.Item(i), InStr( objMatches.Item(i), " " ) ) )
dicHelpShort.Add strCommand, strHelpShort
dicHelpLong.Add strCommand, GetCmdHelp( strCommand )
arrHelpWin.Add strCommand
arrHelpWinChr1.Add Left( strCommand, 1 )
NextSet objMatches = Nothing
Set objRE = Nothing
' Display intermediate results for debugging purposesIf blnDebug Then
strMsg = DebugDisplayHelpFound( )
WScript.Echo strMsg
If blnDebugLog Then
On Error Resume Next
objDebugLog.Write strMsg
If Err Then
WScript.Echo "==================================================="
WScript.Echo "DEBUG: Error while trying to write to the log file:"
WScript.Echo Err.Description
WScript.Echo "==================================================="
End If
On Error Goto 0
End If
End if
If Not blnWindowsOnly Then
AddCommand "ACCESSCHK", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\n\r]+"
AddCommand "ACINIUPD", ":[^\r\n]+", "[^:\r\n][^\r\n]+"
AddCommand "ADRESTORE", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\n\r]+"
AddCommand "APPEND", "^([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "APPVERIF", "[^\r\n]+", "[^\r\n]+"
AddCommand "ARP", "\r\n[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "(\r\n[^\r\n]+)+"
AddCommand "AT", "([^ ][^\r\n]+\r\n)+", "([^\r\n]+\r\n)+"
AddCmdNoSummary "AUDITPOL"AddCommand "AUTORUNSC", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\r\n]+"
AddCommand "BCDBOOT", "[^\r\n]+\r\n\r\n([^\r\n\<]+\r\n)+", "(.|\r|\n)+"
AddCommand "BDEHDCFG", "Description:\s+([^\n]+\n)+", "\s.*[\n\r]{0,2}.*"
AddCommand "BITSADMIN", "\r\n[^\r\n\(\[]+\r\n([^\r\n\(\[]+\r\n)*", "([^\r\n]+\r\n)+"
AddCommand "BOOTCFG", ":\r\n +[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "(\r\n +[^\r\n]+)+"
AddCmdNoSummary "CDBURN" AddCmdNoSummary "CERTREQ" AddCmdNoSummary "CERTUTIL" AddCmdNoSummary "CHANGE"AddCommand "CHGLOGON", "^([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "CHGPORT", "^([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "CHGUSR", "^([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "CHOICE", "[\r\n]+CHOICE +\[ */[^\r\n]+[\r\n]+[A-Za-z ]+:[\r\n]+( +[^\/\r\n]+[\r\n]+)+[A-Za-z ]+:[\r\n]", "([\r\n]+ +[^\/\r\n]+)+[\r\n]"
AddCommand "CIPHER", "([^ ][^\r\n]+\r\n)+", "([^\r\n]+\r\n)+"
AddCommand "CLIP", ":\r\n +[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "([^:][^\r\n]+\r\n)+"
AddCommand "CMDKEY", "\r\n[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "(\r\n[^\r\n]+)+"
AddCommand "CONTIG", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\r\n]+"
AddCommand "COREINFO", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\r\n]+"
AddCmdNoSummary "CSCRIPT"AddCommand "CSVDE", "\r\n[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "(\r\n[^\r\n]+)+"
AddCommand "DCDIAG", "([^\r\n]+[\r\n]{1,2})+", "([^\r\n]+[\r\n]{1,2})+"
AddCommand "DEBUG", "^([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "DEFRAG", ":[\n\r]+(\s+[^\r\n]+[\r\n]+)+", "([^\r\n:][^\r\n]+[\r\n]+)+"
AddCommand "DEVCON", "[A-Z][^\r\n\[]+:[\r\n]{2,3}", "[^:\r\n]+"
AddCmdNoSummary "DHCPLOC"AddCommand "DIANTZ", "([^\r\n\[]+ [^\r\n\[]+[\r\n]+)+", "(.|\r|\n)+"
AddCmdNoSummary "DISKPERF"AddCommand "DISKRAID", "[\r\n]([^\r\n\(]+[\r\n])+", "[\r\n]([^\r\n\(]+[\r\n])+"
AddCommand "DISM", ":\r?\n\r?\n( +[^\r\n]+\r?\n)+\r?\n", "([^:][^\r\n]+\r?\n)+"
AddCommand "DISPDIAG", "^([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCmdNoSummary "DJOIN"AddCommand "DPATH", "^([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "DSACLS", "[A-Z][^\r\n\[]+[\r\n]{2,3}", "[^\r\n]+"
AddCommand "DSADD", ": +[A-Z][^\r\n]+(\r\n[^\r\n]+)*:\r\n\r\n", "[^:](.|\r|\n)+\."
AddCommand "DSDBUTIL", "\n([^ \r\n\(][^\r\n\(]+\r?\n)+\r?\n", "(.|\r|\n)+"
AddCommand "DSGET", ": +[A-Z][^\r\n]+(\r\n[^\r\n]+)*:\r\n\r\n", "[^:](.|\r|\n)+\."
AddCommand "DSMOD", ": +[A-Z][^\r\n]+(\r\n[^\r\n]+)*:\r\n\r\n", "[^:](.|\r|\n)+\."
AddCommand "DSMOVE", ": +[A-Z][^\r\n]+(\r\n[^\r\n]+)*\r\n\r\n", "[^:](.|\r|\n)+\."
AddCommand "DSQUERY", ": +[A-Z][^\r\n]+(\r\n[^\r\n]+)*:\r\n\r\n", "[^:](.|\r|\n)+\."
AddCommand "DSRM", ": +[A-Z][^\r\n]+(\r\n[^\r\n]+)*\r\n\r\n", "[^:](.|\r|\n)+\."
AddCommand "DU", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\r\n]+"
AddCmdNoSummary "DVDBURN"AddCommand "EDIT", "[^\r\n]+\r\n([^\s\r\n][^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "EDLIN", "([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "EPAL", "([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "EVENTCREATE", ":\r\n +[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "(\r\n +[^\r\n]+)+"
AddCommand "EXE2BIN", "([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "EXPAND", "\r\n\r\n[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "(\r\n[^\r\n]+)+"
AddCommand "EXTRACT", "\)[^\n\r]+\r\n", "[^\)\r\n][^\r\n]+"
AddCommand "FILEVER", "([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "FINDLINKS", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\r\n]+"
AddCommand "FINGER", "\r\n[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "(\r\n[^\r\n]+)+"
AddCmdNoSummary "FLTMC"AddCommand "FORFILES", ":\r\n +[A-Z][^\r\n]+(\r\n[^\r\n]+)*\r\n\r\n", "(\r\n[^\r\n]+)+"
AddCommand "FTP", "\r\n[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "(\r\n[^\r\n]+)+"
AddCommand "GETMAC", ":\r\n +[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "(\r\n +[^\r\n]+)+"
AddCommand "GPFIXUP", "([^\r\n]+[\r\n]{2,3})+[\r\n]{2,3}", "([^\r\n]+[\r\n]{2,3})+"
AddCommand "GPUPDATE", ": +[A-Z][^\r\n]+[\r\n]{2,3}([^\r\n]+[\r\n]{2,3})*[\r\n]{4,6}", "([^:][^\r\n]+[\r\n]{2,3})+"
AddCommand "GRAFTABL", "([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "HANDLE", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\n\r]+"
AddCommand "HEX2DEC", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\n\r]+"
AddCommand "HOSTNAME", "\r\n[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "(\r\n[^\r\n]+)+"
AddCommand "IFMEMBER", "\r\n[^/]+\r\n", "(.|\r|\n)+"
AddCmdNoSummary "IISRESET"AddCommand "IPCONFIG", "\r\n\r\n[A-Z][^\r\n]+\r\n([^\r\n\s][^\r\n]+\r\n)+\r\n", "([^\r\n]+\r\n)+"
AddCommand "ISCSICLI", "([^\r\n]+ [^\r\n]+[\r\n]{1,2})+", "(.|\r|\n)+"
AddCommand "JT", "[^\r\n]+", "(.|\r|\n)+"
AddCommand "JUNCTION", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\n\r]+"
AddCommand "LDIFDE", "[\r\n]+([^\r\n]+ [^\r\n]+[\r\n]{1,2}[^=])+", "([^\r\n]+ [^\r\n]+[\r\n]+)+"
AddCommand "LDMDUMP", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\n\r]+"
AddCommand "LISTDLLS", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\n\r]+"
AddCommand "LODCTR", "\r\n +[A-Z][^\r\n]+\r\n( +[^\r\n]+\r\n)*\r\n", "([^\r\n]+\r\n)+"
AddCommand "LOGEVENT", ": +[^\r\n]+\r\n([^\r\n]+\r\n)*", "[^:][^\r\n]+\r\n([^\r\n]+\r\n)*"
AddCommand "LOGMAN", "[\r\n]+[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "([^\r\n]+\r\n)+"
AddCommand "LOGOFF", "[^\r\n]+\r\n", "[^\r\n]+"
AddCommand "LOGONSESSIONS", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\r\n]+"
AddCommand "LPR", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\r\n]+"
AddCommand "MAKECAB", "([^\r\n\[]+ [^\r\n\[]+[\r\n]+)+", "(.|\r|\n)+"
AddCommand "MANAGE-BDE", "Description:\s+([^\n]+\n)+", "\s.*[\n\r]{0,2}.*"
AddCommand "MBR2GPT", "([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "MEM", "([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "MOUNTVOL", "[\r\n]*[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "([^\r\n]+\r\n)+"
AddCommand "MOVEFILE", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\r\n]+"
AddCmdNoSummary "MRINFO"AddCommand "MSG", "([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "NBTSTAT", "([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCmdNoSummary "NET" AddCmdNoSummary "NETCFG" AddCmdNoSummary "NETDOM" AddCmdNoSummary "NETSH"AddCommand "NETSTAT", "[\r\n]*[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "([^\r\n]+\r\n)+"
AddCommand "NLSFUNC", "([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCmdNoSummary "NLTEST" AddCmdNoSummary "NSLOOKUP"AddCommand "NTDSUTIL", "\n([^ \r\n\(][^\r\n\(]+\r?\n)+\r?\n", "(.|\r|\n)+"
AddCommand "OPENFILES", ":\r\n\s([^\r\n]+\r\n)+\r\n", "[^:](.|\r|\n)+"
AddCmdNoSummary "PATHPING" AddCmdNoSummary "PING"AddCommand "PNPUNATTEND", ":[\r\n]+[^:\r\n]+", "[^:\r\n]+"
AddCommand "PNPUTIL", "^[\n\r]*[^:\r\n]+[\n\r]+", "[^\n\r]+"
AddCommand "PORTQRY", "[\r\n]*[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "([^\r\n]+\r\n)+"
AddCommand "POWERCFG", ":\r\n +[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "(\r\n +[^\r\n]+)+"
AddCmdNoSummary "POWERSHELL"AddCommand "PRINTBRM", "^[\n\r]*[^\n\r]+", "[^\n\r]+"
AddPrnScript "PRNCNFG.VBS" AddPrnScript "PRNDRVR.VBS" AddPrnScript "PRNJOBS.VBS" AddPrnScript "PRNMNGR.VBS" AddPrnScript "PRNPORT.VBS" AddPrnScript "PRNQCTL.VBS"AddCommand "PROCDUMP", "^[\n\r]+(?:[^\n\r]+[\n\r]{1,3}){4}[\n\r]{1,3}((?:[^\n\r\-:\(]+[\n\r]{1,3}){1,2})[\n\r]+", "[\n\r]+([^\n\r\(\-]+[\n\r]{1,3})[\n\r]+"
AddCommand "PSEXEC", "- ([^\r\n\-]+[\r\n]{1,2})+", "[^-]([^\r\n]+\r\n)+"
AddCommand "PSFILE", "([\r\n]{1,2}[A-Za-z .]+ [A-Za-z .]+)+\.", "(.|\r|\n)+"
AddCommand "PSGETSID", "- ([^\r\n\-]+[\r\n]{1,2})+", "[^-]([^\r\n]+\r\n)+"
AddCommand "PSINFO", "- ([^\r\n\-]+[\r\n]{1,2})+", "[^-]([^\r\n]+\r\n)+"
AddCommand "PSKILL", "- ([^\r\n\-]+[\r\n]{1,2})+", "[^-]([^\r\n]+\r\n)+"
AddCommand "PSLIST", "- ([^\r\n\-]+[\r\n]{1,2})+", "[^-]([^\r\n]+\r\n)+"
AddCommand "PSLOGGEDON", "- ([^\r\n\-]+[\r\n]{1,2})+", "[^-]([^\r\n]+\r\n)+"
AddCommand "PSLOGLIST", "- ([^\r\n\-]+[\r\n]{1,2})+", "[^-]([^\r\n]+\r\n)+"
AddCommand "PSPASSWD", "- ([^\r\n\-]+[\r\n]{1,2})+", "[^-]([^\r\n]+\r\n)+"
AddCommand "PSPING", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\n\r]+"
AddCommand "PSSERVICE", "- ([^\r\n\-]+[\r\n]{1,2})+", "[^-]([^\r\n]+\r\n)+"
AddCommand "PSSHUTDOWN", "- ([^\r\n\-]+[\r\n]{1,2})+", "[^-]([^\r\n]+\r\n)+"
AddCommand "PSSUSPEND", "- ([^\r\n\-]+[\r\n]{1,2})+", "[^-]([^\r\n]+\r\n)+"
AddPrnScript "PUBPRN.VBS"AddCommand "QAPPSRV", "^([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "QPROCESS", "^([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCmdNoSummary "QUERY"AddCommand "QUSER", "^([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "QWINSTA", "^([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCmdNoSummary "RASDIAL" AddCmdNoSummary "RDPSIGN"AddCommand "REAGENTC", "([^\r\n\\<[]+[\r\n]+)+", "(.|\r|\n)+"
AddCommand "RECIMG", "^([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "RECOVER", "[\r\n]*[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "([^\r\n]+\r\n)+"
AddCmdNoSummary "REDIRCMP" AddCmdNoSummary "REDIRUSR" AddCmdNoSummary "REG"AddCommand "REGDELNULL", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\n\r]+"
AddCmdNoSummary "REGINI"AddCommand "REGISTER-CIMPROVIDER", "([^\r\n\:]+[\r\n]+)+", "(.|\r|\n)+"
AddCommand "RELOG", "[\r\n]+[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)+\r\n", "([^\r\n]+\r\n)+"
AddCommand "RENDOM", "[\r\n]([^\r\n\(\:]+[\r\n]+)+", "(.|\r|\n)+"
AddCmdNoSummary "REPADMIN"AddCommand "REPAIR-BDE", "Description:\s+([^\n]+\n)+", "\s.*[\n\r]{0,2}.*"
AddCmdNoSummary "RESET"AddCommand "ROUTE", "\r\n[A-Z][^\r\n]+\r\n([^\r\n]+\r\n)*\r\n", "([^\r\n]+\r\n)+"
AddCmdNoSummary "RPCPING"AddCommand "RU", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\n\r]+"
AddCmdNoSummary "RUNAS"AddCommand "RWINSTA", "RWINSTA\s+[^\n\r]+[\n\r]{0,2}[^\n\r]+[\n\r]{3,}", "[\n\r].*[\n\r]"
AddCmdNoSummary "SDBINST"AddCommand "SDELETE", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\n\r]+"
AddCmdNoSummary "SECEDIT" AddCmdNoSummary "SETSPN"AddCommand "SETVER", "([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "SETX", ":\r\n +[^\r\n/]+\r\n( +[^\r\n/]+\r\n)*", "[^:](.|\r|\n)+"
AddCommand "SFC", "[\r\n]([^\r\n\(\[]+[\r\n]{2,3})+", "(.|\r|\n)+"
AddCommand "SHADOW", "SHADOW\s+[^\n\r]+[\n\r]{0,2}[^\n\r]+[\n\r]{3,}", "[\n\r].*[\n\r]"
AddCmdNoSummary "SHORTCUT"AddCommand "SIGCHECK", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\n\r]+"
AddCommand "SOON", ":[^:]*:", "[^:]+"
AddCommand "STREAMS", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\n\r]+"
AddCommand "STRINGS", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\n\r]+"
AddCommand "SUBINACL", "([^\r\n]+\r\n)+", "([^\r\n]+\r\n)+"
AddCmdNoSummary "SXSTRACE"AddCommand "SYNC", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\n\r]+"
AddCommand "TAKEOWN", ":\r\n +[^\r\n]+\r\n( +[^\r\n]+\r\n)*", "([^:\r\n][^\r\n]+\r\n)+"
AddCommand "TIMEOUT", ":\r\n +[^\r\n]+\r\n( +[^\r\n]+\r\n)*", "[^:](.|\r|\n)+"
AddCmdNoSummary "TRACERPT" AddCmdNoSummary "TRACERT"AddCommand "TSCON", "([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "TSDISCON", "([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "TSKILL", "([^\r\n]+\r\n)+", "(.|\r|\n)+"
AddCommand "TYPEPERF", "\)[\r\n]{2,4}([^\s\r\n][^\r\n]+[^:\r\n][\r\n]{2,4})+", "([^\)\s\r\n][^\r\n]+[\r\n]{2,4})+"
AddCmdNoSummary "TZUTIL"AddCommand "UNLODCTR", "\r\n +[A-Z][^\r\n]+\r\n( +[^\r\n]+\r\n)*\r\n", "([^\r\n]+\r\n)+"
AddCommand "VAULTCMD", "[^\r\n]+", ".+"
AddCmdNoSummary "VERIFIER"AddCommand "VOLUMEID", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\n\r]+"
AddCommand "VSSADMIN", "[^\(\r\n]+\r\n([^\(\r\n\(]+)*", "([^\r\n]+\r\n)+"
AddCmdNoSummary "W32TM"AddCommand "WAITFOR", ":\r\n +[^\r\n]+\r\n( +[^\r\n]+\r\n)*", "[^:](.|\r|\n)+"
AddCommand "WBADMIN", "[^\r\n]+", ".+"
AddCmdNoSummary "WECUTIL" AddCmdNoSummary "WEVTUTIL"AddCommand "WHERE", ":\r\n +[^\r\n]+\r\n( +[^\r\n]+\r\n)*", "[^:](.|\r|\n)+"
AddCommand "WHOAMI", "[^\d]:\r\n +[^\r\n]+\r\n( +[^\r\n]+\r\n)*", "[^:]{2}(.|\r|\n)+"
AddCommand "WHOIS", "^[\n\r]*[^\n\r]*[\n\r]+", "[^\n\r]+"
AddCommand "WINRM", "\r\n[^\r\n]+\r\n([^\r\n]+\r\n)*", "([^\r\n]+\r\n)+"
AddCmdNoSummary "WINRS"AddCommand "WINSAT", "\r\n[^\r\n]+\r\n([^\r\n]+\r\n)*", ".+"
AddCmdNoSummary "WMIC" ' Extra check for RUNAS, because it doesn't always use Standard OutputIf GetAddedCmdHelp( "RUNAS" ) <> "" Then
AddCmdNoSummary "RUNAS"End If
' Sort the list of commandsSortDictionary dicHelpShort, dictKey
' Display intermediate results for debugging purposesIf blnDebug Then
strMsg = DebugDisplayHelpFound( )
WScript.Echo strMsg
If blnDebugLog Then
On Error Resume Next
objDebugLog.Write strMsg
If Err Then
WScript.Echo "==================================================="
WScript.Echo "DEBUG: Error while trying to write to the log file:"
WScript.Echo Err.Description
WScript.Echo "==================================================="
End If
On Error Goto 0
End If
End if
End If
If blnDebug Then
DebugDisplay Max( dicHelpShort.Count, dicHelpLong.Count ) & " commands processed," & vbCrLf _
& dicHelpShort.Count & " with summary," & vbCrLf _
& dicHelpLong.Count & " with long help text."
End If
' Create the head for the HTML pagestrHead = HTMLHead( )
' Create the commands index for the HTML pagestrPreviousLetter = "@"
strAlphabet = "<table class=""Alphabet"">" & vbCrLf & "<tr>" & vbCrLf
strHTML = "<table class=""List"">" & vbCrLf
For Each objKey In dicHelpShort.Keys( )
strCommand = objKey ' Only add the command if there is a help text or summaryIf Not SuperTrim( dicHelpLong.Item( strCommand ) ) & SuperTrim( dicHelpShort.Item( strCommand ) ) = "" Then
strFileVer = FileVer( strCommand )
If strFileVer <> "-1" Then
If arrIntCmd.Contains( strCommand ) Then
strClass = " class=""Internal"""
ElseIf arrHelpWin.Contains( strCommand ) Then
strClass = ""
ElsestrClass = " class=""Additional"""
End If
End If
If arrHelpWinChr1.Contains( Left( strCommand, 1 ) ) Then
blnNohlpChr1 = False
ElseblnNohlpChr1 = True
End If
strFirstLetter = UCase( Left( strCommand, 1 ) )
If strFirstLetter <> strPreviousLetter Then
If strFirstLetter <> "A" Then
strHTML = strHTML & "<tr"
If blnNohlpChr1 Then strHTML = strHTML & strClass
strhtml = strhtml & "><td colspan=""2""> </td></tr>" & vbCrLf
End If
strHTML = strHTML & "<tr id=""" & strFirstLetter & """"
If blnNohlpChr1 Then strHTML = strHTML & strClass
strHTML = strHTML _& ">" _
& vbCrLf _& vbTab & "<th colspan=""2"">" & strFirstLetter & "</th>" _
& vbCrLf _& "</tr>" _
& vbCrLf _& "<tr"
If blnNohlpChr1 Then strHTML = strHTML & strClass
strHTML = strHTML _& "><td colspan=""2""> </td></tr>" _
& vbCrLfIf strFirstLetter <> "A" Then
If Asc( strFirstLetter ) - Asc( strPreviousLetter ) > 1 Then
For i = Asc( strFirstLetter ) - Asc( strPreviousLetter ) - 1 To 1 Step -1
strAlphabet = strAlphabet _& vbTab & "<th style=""color: gray;"">" & Chr( Asc( strFirstLetter ) - i ) & "</th>" _
& vbCrLf NextEnd If
End If
strAlphabet = strAlphabet & vbTab & "<th><a href=""#" & strFirstLetter & """"
If blnNohlpChr1 Then strAlphabet = strAlphabet & " class=""AdditionalChar"""
strAlphabet = strAlphabet & ">" & strFirstLetter & "</a></th>" & vbCrLf
strPreviousLetter = strFirstLetterEnd If
strHTML = strHTML _& "<tr" & strClass & ">" _
& vbCrLfIf dicHelpLong.Exists( strCommand ) Then
If dicHelpLong.Item( strCommand ) = "" Then
strHTML = strHTML & vbTab & "<td class=""Command"">" & strCommand & "</td>" & vbCrLf
ElsestrHTML = strHTML & vbTab & "<td class=""Command""><a href=""#" & strCommand & """>" & strCommand & "</a></td>" & vbCrLf
End If
End If
strHTML = strHTML & vbTab & "<td>" & Escape( dicHelpShort.Item( strCommand ), intCodePage ) & "</td>" & vbCrLf
strHTML = strHTML & "</tr>" & vbCrLf
End If
End If
NextIf strFirstLetter <> "Z" Then
For i = 1 To Asc( "Z" ) - Asc( strFirstLetter )
strAlphabet = strAlphabet & vbTab & "<th style=""color: gray;"">" & Chr( Asc( strFirstLetter ) + i ) & "</th>" & vbCrLf
NextEnd If
strHTML = strHTML & "</table>" & vbCrLf & vbCrLf
If Not blnWindowsOnly Then
strAlphabet = strAlphabet & vbTab & "<th><input type=""button"" id=""WinOnlyButton"" value=""Windows Help Only"" onclick=""toggleVisibility();"" /></th>" & vbCrLf
End If
strAlphabet = strAlphabet & "</tr>" & vbCrLf & "</table>" & vbCrLf & vbCrLf
strHTML = strHead & strAlphabet & "<p> </p>" & vbCrLf & vbCrLf & strHTML
' Add detailed help for each command, if availableFor Each objKey In dicHelpShort.Keys( )
strCommand = objKey ' Only add the command if there is a help textIf Not SuperTrim( dicHelpLong.Item( strCommand ) ) = "" Then
strFileVer = FileVer( strCommand )
If strFileVer <> "-1" Then
If dicHelpLong.Exists( strCommand ) Then
' WinSAT ignores the actual code page, so we use code page 1252 to "escape" its outputIf strCommand = "WINSAT" Then
strHelpLong = Escape( dicHelpLong.Item( strCommand ), 1252 )
ElsestrHelpLong = Escape( dicHelpLong.Item( strCommand ), intCodePage )
End If
If strHelpLong <> "" Then
If arrIntCmd.Contains( strCommand ) Then
strHTML = strHTML & "<div class=""InternalCommand"">" & vbCrLf & vbCrLf
strCmdInfo = " <span style=""font-size: 60%;"">(internal command)</span>"
ElseIf Not arrHelpWin.Contains( strCommand ) Then
strHTML = strHTML & "<div class=""AdditionalHelp"">" & vbCrLf & vbCrLf
End If
If strFileVer = "" Then
strCmdInfo = ""
ElsestrCmdInfo = " <span style=""font-size: 60%;"">(Version " & strFileVer & ")</span>"
End If
End If
strHTML = strHTML & "<p> </p>" & vbCrLf & vbCrLf _
& "<h2 id=""" & strCommand & """>" & strCommand & strCmdInfo & "</h2>" & vbCrLf & vbCrLf _
& "<pre>" & strHelpLong & "</pre>" & vbCrLf & vbCrLf _
& "<div style=""text-align: center;""><a href=""#"">Back to the top of this page</a></div>" & vbCrLf & vbCrLf
If arrIntCmd.Contains( strCommand ) Or Not arrHelpWin.Contains( strCommand ) Then
strHTML = strHTML & "</div>" & vbCrLf & vbCrLf
End If
End If
End If
End If
End If
Next' Write the "footer"strHTML = strHTML & HTMLFoot( )
'Trim leading and trailing blank lines inside PRE blocks (workaround for CR/CR/LF bug)strHTML = TrimCrLf( strHTML )
If intUnexpectedCodepage > 0 Then
WScript.Echo "Unexpected Code Page: " & intCodePage & vbCrLf
WScript.Echo "To have it added to the list of correctly translated code pages, notify the author of this script." & vbCrLf
WScript.Echo "Until this code page is added to the script, accented letters will be displayed incorrectly in the HTML output."
End If
If blnQuiet Then
WScript.Echo strHTML
Else ' Write the complete HTML code to a fileOn Error Resume Next
Set objHTMLFile = objFSO.CreateTextFile( strFile, True, False )
objHTMLFile.Write strHTML
Set objHTMLFile = Nothing
If Err Then
DebugDisplay "Error: " & Err.Description & vbCrLf & "Try ""ALLHELP.VBS /Q > ""outputfile"" if you cannot correct the error"
End If
On Error Goto 0
' Allow the virus scanner some time before opening the HTML file we just createdWScript.Sleep 3000
'Open the HTML filewshShell.Run """" & strFile & """", 0, False
' Display this script's help screen when in debugging modeIf blnDebug Then Syntax
End If
If blnDebugLog Then
objDebugLog.Close
Set objDebugLog = Nothing
End If
' Close the last remaining objectsSet objFSO = Nothing
Set wshShell = Nothing
Sub AddCmdNoSummary( myCommand )
' Add a command using the file description without checking for a command summary first Dim strCmdHelp, strCommand, strDebug, strFileDescriptionstrCommand = Trim( UCase( myCommand ) )
If Not dicHelpShort.Exists( strCommand ) Then
blnAdditional = True
If blnDebug Then
strDebug = "DEBUG: Adding help for the " & strCommand & " command"
WScript.Echo String( Len( strDebug ), "=" ) & vbCrLf & strDebug
WScript.Echo String( Len( strDebug ), "=" ) & vbCrLf
End If
' Get the complete help textstrCmdHelp = GetAddedCmdHelp( strCommand )
' Get the file descriptionstrFileDescription = GetFileDescription( strCommand )
If ( strCmdHelp <> "" Or strFileDescription <> "" ) Then
dicHelpLong.Add strCommand, strCmdHelp
dicHelpShort.Add strCommand, strFileDescription
ElseIf blnDebug Then DebugDisplay "No help nor description available for " & strCommand
End If
End If
End Sub
Sub AddCommand( myCommand, myPattern1, myPattern2 )
' Check if a command is available and, if so, get its complete help text Dim objMatches, objMatches2, objRE, strCommand, strDebug, strFolderstrCommand = Trim( UCase( myCommand ) )
If dicHelpShort.Item( strCommand ) = "" Then
blnAdditional = True
If blnDebug Then DebugDisplay "Trying to get help for the " & strcommand & " command:"
' Get the complete help text for the commanddicHelpLong.Item( strCommand ) = GetAddedCmdHelp( strCommand )
' Try to extract the command help summary using two regular expressionsSet objRE = New RegExp
objRE.Global = False
objRE.IgnoreCase = False
objRE.Pattern = myPattern1
Set objMatches = objRE.Execute( dicHelpLong.Item( strCommand ) )
If blnDebug Then
WScript.Echo "DEBUG: " & Right( Space( 3 ) & objMatches.Count, 3 ) & " match(es) for the regular expression"
If objMatches.Count = 0 Then
If dicHelpLong.Item( strCommand ) = "" Then
WScript.Echo "DEBUG: Empty help text (unknown command?)"
ElseWScript.Echo "DEBUG: The following help text did not match:"
WScript.Echo dicHelpLong.Item( strCommand )
End If
End If
WScript.Echo String( Len( strDebug ), "=" ) & vbCrLf
End If
If objMatches.Count > 0 Then
objRE.Pattern = myPattern2
Set objMatches2 = objRE.Execute( objMatches.Item(0) )
If objMatches2.Count > 0 Then
dicHelpShort.Item( strCommand ) = SuperTrim( objMatches2.Item(0) )
End If
Set objMatches2 = Nothing
End If
Set objMatches = Nothing
Set objRE = Nothing
End If
' If no help text summary was found, try using the file descriptionIf dicHelpShort.Item( strCommand ) = "" Then
If strCommand = "PRINTBMR" Then
strFolder = wshShell.ExpandEnvironmentStrings( "%windir%\system32\spool\tools" )
End If
dicHelpShort.Item( strCommand ) = GetFileDescription( strCommand )
End If
' For debugging purposesIf blnDebug Then
DebugDisplay vbCrLf _
& "ShortHelp for """ & strCommand & """ is :" & dicHelpShort.Item( strCommand ) _
& vbCrLf _& "LongHelp for """ & strCommand & """ is :" & dicHelpLong.Item( strCommand )
End If
End Sub
Sub AddPrnScript( myCommand )
Dim blnFound Dim intFolders Dim colMatches, colSubFolders, objExec, objFolder, objRE Dim strCommand, strFolder, strHelp, strScriptPathstrFolder = wshShell.ExpandEnvironmentStrings( "%windir%\System32\Printing_Admin_Scripts" )
If objFSO.FolderExists( strFolder ) Then
Set colSubFolders = objFSO.GetFolder( strFolder ).SubFolders
intFolders = colSubFolders.Count
blnFound = False
If intFolders = 1 Then
strFolder = colSubFolders(0).Path
blnFound = True
ElseIf intFolders > 1 Then
For Each objFolder In colSubFolders
If ( Left( GetOSLanguage( strOSLocl ), 7 ) = "English" ) And ( InStr( UCase( objFolder.Name ), "EN-" ) > 0 ) Then
strFolder = objFolder.Path
blnFound = True
End If
NextIf Not blnFound Then
For Each objFolder In colSubFolders
strFolder = objFolder.Path
blnFound = True
NextEnd If
End If
Set colSubFolders = Nothing
If blnFound Then
With objFSOIf .FileExists( .BuildPath( strFolder, myCommand ) ) Then
strScriptPath = .BuildPath( strFolder, myCommand )
ElseIf .FileExists( .BuildPath( strFolder, myCommand & ".vbs" ) ) Then
strScriptPath = .BuildPath( strFolder, myCommand & ".vbs" )
ElseExit Sub
End If
strCommand = UCase( .GetFileName( strScriptPath ) )
End With
If blnDebug Then DebugDisplay "Trying to get help for the " & strCommand & " command:"
' Get the complete help text for the commandSet objExec = wshShell.Exec( "CMD /A /C TYPE """ & strScriptPath & """ | MORE" )
strHelp = objExec.StdOut.ReadAll( )
Set objExec = Nothing
Set objRE = New RegExp
objRE.Pattern = "^('[^\n\r]*[\n\r]{1,2})+"
objRE.Global = False
If objRE.Test( strHelp ) Then
Set colMatches = objRE.Execute( strHelp )
strHelp = vbCrLf & colMatches.Item(0).Value
Set colMatches = Nothing
objRE.Pattern = "[\n\r]+'-*"
objRE.Global = True
strHelp = objRE.Replace( strHelp, vbCrLf )
dicHelpLong.Item( strCommand ) = strHelp
objRE.Pattern = "Abstract:\s*" & strCommand & "\s*-\s*((?:.|\n|\r)+)Usage:"
objRE.Global = True
objRE.IgnoreCase = True
If objRE.Test( strHelp ) Then
Set colMatches = objRE.Execute( strHelp )
strHelp = SuperTrim( colMatches.Item(0).Submatches.Item(0) )
dicHelpShort.Item( strCommand ) = UCase( Left( strHelp, 1 ) ) & Mid( strHelp, 2 )
Set colMatches = Nothing
ElseobjRE.Pattern = "\s+" & strCommand & "\s+-\s+((?:.|\n|\r)*)Arguments are:"
objRE.Global = True
objRE.IgnoreCase = True
If objRE.Test( strHelp ) Then
Set colMatches = objRE.Execute( strHelp )
strHelp = SuperTrim( colMatches.Item(0).Submatches.Item(0) )
dicHelpShort.Item( strCommand ) = UCase( Left( strHelp, 1 ) ) & Mid( strHelp, 2 )
Set colMatches = Nothing
ElsedicHelpShort.Item( strCommand ) = ""
End If
End If
ElseExit Sub
End If
Set objRE = Nothing
If blnDebug Then
DebugDisplay vbCrLf _
& "ShortHelp for """ & strCommand & """ is :""" & dicHelpShort.Item( strCommand ) & """" _
& vbCrLf _& "LongHelp for """ & strCommand & """ is :" & dicHelpLong.Item( strCommand )
End If
End If
End If
End Sub
Sub DebugDisplay( myString )
' Format and then display debugging info Dim strSep, strMsgIf blnQuiet Then Exit Sub
strMsg = "DEBUG: " & myString
strSep = String( Min( Len( strMsg ), 80 ), "=" )
strMsg = strSep & vbCrLf & strMsg & vbCrLf & strSep & vbCrLf
WScript.Echo strMsg
If blnDebugLog Then
On Error Resume Next
objDebugLog.Write strMsg
If Err Then
WScript.Echo "=================================================="
WScript.Echo "DEBUG: Error while trying to write to the log file"
WScript.Echo "=================================================="
End If
On Error Goto 0
End If
End Sub
Function DebugDisplayHelpFound( )
' Show intermediate results Dim strMsgstrMsg = "====================================" _
& vbCrLf _& "DEBUG: The following help was found:" _
& vbCrLf _& "====================================" _
& vbCrLfFor Each objKey In dicHelpShort.Keys( )
strMsg = strMsg & Left( objKey & Space( 16 ), 16 ) & Escape( dicHelpShort.Item( objKey ), intCodePage ) & vbCrLf
' strMsg = strMsg & Left( objKey & Space( 16 ), 16 ) & dicHelpShort.Item( objKey ) & vbCrLf Next strMsg = strMsg _& "====================================" _
& vbCrLf DebugDisplayHelpFound = strMsgEnd Function
Function Escape( myText, myCodePage )
' Remove characters that HTML cannot properly handle Dim strTextstrText = Replace( myText, "&", "&" )
strText = Replace( strText, "^", "ˆ" )
strText = Replace( strText, "<", "<" )
strText = Replace( strText, ">", ">" )
Select Case myCodePage
Case 437:
strText = Replace( strText, Chr(160), "á" )
strText = Replace( strText, Chr(131), "â" )
strText = Replace( strText, Chr(133), "à" )
strText = Replace( strText, Chr(134), "å" )
strText = Replace( strText, Chr(143), "Å" )
strText = Replace( strText, Chr(132), "ä" )
strText = Replace( strText, Chr(142), "Ä" )
strText = Replace( strText, Chr(145), "æ" )
strText = Replace( strText, Chr(146), "Æ" )
strText = Replace( strText, Chr(135), "ç" )
strText = Replace( strText, Chr(128), "Ç" )
strText = Replace( strText, Chr(130), "é" )
strText = Replace( strText, Chr(144), "É" )
strText = Replace( strText, Chr(136), "ê" )
strText = Replace( strText, Chr(138), "è" )
strText = Replace( strText, Chr(137), "ë" )
strText = Replace( strText, Chr(161), "í" )
strText = Replace( strText, Chr(140), "î" )
strText = Replace( strText, Chr(141), "ì" )
strText = Replace( strText, Chr(139), "ï" )
strText = Replace( strText, Chr(164), "ñ" )
strText = Replace( strText, Chr(165), "Ñ" )
strText = Replace( strText, Chr(162), "ó" )
strText = Replace( strText, Chr(147), "ô" )
strText = Replace( strText, Chr(149), "ò" )
strText = Replace( strText, Chr(148), "ö" )
strText = Replace( strText, Chr(153), "Ö" )
strText = Replace( strText, Chr(163), "ú" )
strText = Replace( strText, Chr(150), "û" )
strText = Replace( strText, Chr(151), "ù" )
strText = Replace( strText, Chr(129), "ü" )
strText = Replace( strText, Chr(154), "Ü" )
strText = Replace( strText, Chr(230), "µ" )
strText = Replace( strText, Chr(248), "°" )
strText = Replace( strText, Chr(173), "¡" )
strText = Replace( strText, Chr(168), "¿" )
strText = Replace( strText, Chr(241), "±" )
Case 850:
strText = Replace( strText, Chr(160), "á" )
strText = Replace( strText, Chr(181), "Á" )
strText = Replace( strText, Chr(131), "â" )
strText = Replace( strText, Chr(182), "Â" )
strText = Replace( strText, Chr(133), "à" )
strText = Replace( strText, Chr(183), "À" )
strText = Replace( strText, Chr(134), "å" )
strText = Replace( strText, Chr(143), "Å" )
strText = Replace( strText, Chr(198), "ã" )
strText = Replace( strText, Chr(199), "Ã" )
strText = Replace( strText, Chr(132), "ä" )
strText = Replace( strText, Chr(142), "Ä" )
strText = Replace( strText, Chr(145), "æ" )
strText = Replace( strText, Chr(146), "Æ" )
strText = Replace( strText, Chr(135), "ç" )
strText = Replace( strText, Chr(128), "Ç" )
strText = Replace( strText, Chr(130), "é" )
strText = Replace( strText, Chr(144), "É" )
strText = Replace( strText, Chr(136), "ê" )
strText = Replace( strText, Chr(210), "Ê" )
strText = Replace( strText, Chr(138), "è" )
strText = Replace( strText, Chr(212), "È" )
strText = Replace( strText, Chr(137), "ë" )
strText = Replace( strText, Chr(211), "Ë" )
strText = Replace( strText, Chr(161), "í" )
strText = Replace( strText, Chr(214), "Í" )
strText = Replace( strText, Chr(140), "î" )
strText = Replace( strText, Chr(215), "Î" )
strText = Replace( strText, Chr(141), "ì" )
strText = Replace( strText, Chr(222), "Ì" )
strText = Replace( strText, Chr(139), "ï" )
strText = Replace( strText, Chr(216), "Ï" )
strText = Replace( strText, Chr(164), "ñ" )
strText = Replace( strText, Chr(165), "Ñ" )
strText = Replace( strText, Chr(162), "ó" )
strText = Replace( strText, Chr(224), "Ó" )
strText = Replace( strText, Chr(147), "ô" )
strText = Replace( strText, Chr(226), "Ô" )
strText = Replace( strText, Chr(149), "ò" )
strText = Replace( strText, Chr(227), "Ò" )
strText = Replace( strText, Chr(228), "õ" )
strText = Replace( strText, Chr(229), "Õ" )
strText = Replace( strText, Chr(148), "ö" )
strText = Replace( strText, Chr(153), "Ö" )
strText = Replace( strText, Chr(163), "ú" )
strText = Replace( strText, Chr(233), "Ú" )
strText = Replace( strText, Chr(150), "û" )
strText = Replace( strText, Chr(234), "Û" )
strText = Replace( strText, Chr(151), "ù" )
strText = Replace( strText, Chr(235), "Ù" )
strText = Replace( strText, Chr(129), "ü" )
strText = Replace( strText, Chr(154), "Ü" )
strText = Replace( strText, Chr(236), "ý" )
strText = Replace( strText, Chr(237), "Ý" )
strText = Replace( strText, Chr(225), "ß" )
strText = Replace( strText, Chr(230), "µ" )
strText = Replace( strText, Chr(248), "°" )
strText = Replace( strText, Chr(173), "¡" )
strText = Replace( strText, Chr(191), "¿" )
strText = Replace( strText, Chr(169), "©" )
strText = Replace( strText, Chr(174), "®" )
strText = Replace( strText, Chr(171), "«" )
strText = Replace( strText, Chr(175), "»" )
strText = Replace( strText, Chr(241), "±" )
strText = Replace( strText, Chr(244), "¶" )
Case 1252
strText = Replace( strText, Chr(128), "€" )
strText = Replace( strText, Chr(130), "‚" )
strText = Replace( strText, Chr(131), "ƒ" )
strText = Replace( strText, Chr(132), "„" )
strText = Replace( strText, Chr(136), "ˆ" )
strText = Replace( strText, Chr(137), "‰" )
strText = Replace( strText, Chr(138), "Š" )
strText = Replace( strText, Chr(139), "‹" )
strText = Replace( strText, Chr(140), "Œ" )
strText = Replace( strText, Chr(142), "Ž" )
strText = Replace( strText, Chr(145), "‘" )
strText = Replace( strText, Chr(146), "’" )
strText = Replace( strText, Chr(147), "“" )
strText = Replace( strText, Chr(148), "”" )
strText = Replace( strText, Chr(149), "•" )
strText = Replace( strText, Chr(150), "–" )
strText = Replace( strText, Chr(151), "—" )
strText = Replace( strText, Chr(152), "˜" )
strText = Replace( strText, Chr(153), "™" )
strText = Replace( strText, Chr(154), "š" )
strText = Replace( strText, Chr(155), "›" )
strText = Replace( strText, Chr(156), "œ" )
strText = Replace( strText, Chr(158), "ž" )
strText = Replace( strText, Chr(159), "Ÿ" )
strText = Replace( strText, Chr(161), "¡" )
strText = Replace( strText, Chr(162), "¢" )
strText = Replace( strText, Chr(163), "£" )
strText = Replace( strText, Chr(164), "¤" )
strText = Replace( strText, Chr(165), "¥" )
strText = Replace( strText, Chr(166), "¦" )
strText = Replace( strText, Chr(167), "§" )
strText = Replace( strText, Chr(168), "¨" )
strText = Replace( strText, Chr(169), "©" )
strText = Replace( strText, Chr(170), "ª" )
strText = Replace( strText, Chr(171), "«" )
strText = Replace( strText, Chr(172), "¬" )
strText = Replace( strText, Chr(173), "­" )
strText = Replace( strText, Chr(174), "®" )
strText = Replace( strText, Chr(175), "¯" )
strText = Replace( strText, Chr(176), "°" )
strText = Replace( strText, Chr(177), "±" )
strText = Replace( strText, Chr(178), "²" )
strText = Replace( strText, Chr(179), "³" )
strText = Replace( strText, Chr(180), "´" )
strText = Replace( strText, Chr(181), "µ" )
strText = Replace( strText, Chr(182), "¶" )
strText = Replace( strText, Chr(183), "·" )
strText = Replace( strText, Chr(184), "¸" )
strText = Replace( strText, Chr(185), "¹" )
strText = Replace( strText, Chr(186), "º" )
strText = Replace( strText, Chr(187), "»" )
strText = Replace( strText, Chr(188), "¼" )
strText = Replace( strText, Chr(189), "½" )
strText = Replace( strText, Chr(190), "¾" )
strText = Replace( strText, Chr(191), "¿" )
strText = Replace( strText, Chr(192), "À" )
strText = Replace( strText, Chr(193), "Á" )
strText = Replace( strText, Chr(194), "Â" )
strText = Replace( strText, Chr(195), "Ã" )
strText = Replace( strText, Chr(196), "Ä" )
strText = Replace( strText, Chr(197), "Å" )
strText = Replace( strText, Chr(198), "Æ" )
strText = Replace( strText, Chr(199), "Ç" )
strText = Replace( strText, Chr(200), "È" )
strText = Replace( strText, Chr(201), "É" )
strText = Replace( strText, Chr(202), "Ê" )
strText = Replace( strText, Chr(203), "Ë" )
strText = Replace( strText, Chr(204), "Ì" )
strText = Replace( strText, Chr(205), "Í" )
strText = Replace( strText, Chr(206), "Î" )
strText = Replace( strText, Chr(207), "Ï" )
strText = Replace( strText, Chr(208), "Ð" )
strText = Replace( strText, Chr(209), "Ñ" )
strText = Replace( strText, Chr(210), "Ò" )
strText = Replace( strText, Chr(211), "Ó" )
strText = Replace( strText, Chr(212), "Ô" )
strText = Replace( strText, Chr(213), "Õ" )
strText = Replace( strText, Chr(214), "Ö" )
strText = Replace( strText, Chr(215), "×" )
strText = Replace( strText, Chr(216), "Ø" )
strText = Replace( strText, Chr(217), "Ù" )
strText = Replace( strText, Chr(218), "Ú" )
strText = Replace( strText, Chr(219), "Û" )
strText = Replace( strText, Chr(220), "Ü" )
strText = Replace( strText, Chr(221), "Ý" )
strText = Replace( strText, Chr(222), "Þ" )
strText = Replace( strText, Chr(223), "ß" )
strText = Replace( strText, Chr(224), "à" )
strText = Replace( strText, Chr(225), "á" )
strText = Replace( strText, Chr(226), "â" )
strText = Replace( strText, Chr(227), "ã" )
strText = Replace( strText, Chr(228), "ä" )
strText = Replace( strText, Chr(229), "å" )
strText = Replace( strText, Chr(230), "æ" )
strText = Replace( strText, Chr(231), "ç" )
strText = Replace( strText, Chr(232), "è" )
strText = Replace( strText, Chr(233), "é" )
strText = Replace( strText, Chr(234), "ê" )
strText = Replace( strText, Chr(235), "ë" )
strText = Replace( strText, Chr(236), "ì" )
strText = Replace( strText, Chr(237), "í" )
strText = Replace( strText, Chr(238), "î" )
strText = Replace( strText, Chr(239), "ï" )
strText = Replace( strText, Chr(240), "ð" )
strText = Replace( strText, Chr(241), "ñ" )
strText = Replace( strText, Chr(242), "ò" )
strText = Replace( strText, Chr(243), "ó" )
strText = Replace( strText, Chr(244), "ô" )
strText = Replace( strText, Chr(245), "õ" )
strText = Replace( strText, Chr(246), "ö" )
strText = Replace( strText, Chr(247), "÷" )
strText = Replace( strText, Chr(248), "ø" )
strText = Replace( strText, Chr(249), "ù" )
strText = Replace( strText, Chr(250), "ú" )
strText = Replace( strText, Chr(251), "û" )
strText = Replace( strText, Chr(252), "ü" )
strText = Replace( strText, Chr(253), "ý" )
strText = Replace( strText, Chr(254), "þ" )
strText = Replace( strText, Chr(255), "ÿ" )
Case Else
intUnexpectedCodepage = myCodePageEnd Select
Escape = strTextEnd Function
Function FileVer( myCommand )
Dim strExt, strFile, strFullPathFileVer = "-1" ' Default when file or command not found
strFile = UCase( myCommand )
If UCase( objFSO.GetExtensionName( myCommand ) ) = "VBS" Then
FileVer = ""
ElseIf strFile = "PRINTBRM" Then
strFullPath = wshShell.ExpandEnvironmentStrings( "%windir%\system32\spool\tools\PRINTBRM.EXE" )
ElsestrFullPath = Which( strFile )
End If
If strFullPath <> "" Then
FileVer = objFSO.GetFileVersion( strFullPath )
End If
End Function
Function GetAddedCmdHelp( myCommand )
' Get the short help text for the specified command and remove some unwanted characters Dim colMatches, objExec, objFile, objMatch, objRE, strCommand, strCommandLine, strFile, strHelp, strOutputstrCommand = Trim( UCase( myCommand ) )
' Build the command line to extract the help textstrCommandLine = "CMD.EXE /A /C (TITLE AllHelp " & strScriptVer & ": " & strCommand & "&" & strCommand & " /? 2>&1)"
' Not all commands use the same standard for getting their help textIf strCommand = "AUTORUNSC" Then
' AutorunsC's output encoding is a mess, so we need temporary files and MORE to clean up its outputstrFile = wshShell.ExpandEnvironmentStrings( "%Temp%\" & LCase( strCommand ) & ".txt" )
strCommandLine = "CMD /A /C (" & strCommand & " /? > """ & strFile & """)"
Set objExec = wshShell.Exec( strCommandLine )
objExec.Terminate
strCommandLine = "CMD /C (MORE < """ & strFile & """ > " & strFile & ".2)"
Set objExec = wshShell.Exec( strCommandLine )
objExec.Terminate
strCommandLine = "CMD /A /C (TYPE """ & strFile & ".2"")"
End If
If strCommand = "HEX2DEC" Or strCommand = "IFMEMBER" Then
' These commands show an error message if /? is used, they are best called without any argumentsstrCommandLine = "CMD.EXE /A /C (TITLE AllHelp " & strScriptVer & ": " & strCommand & "&" & strCommand & " 2>&1)"
End If
If strCommand = "PRINTBRM" Then
' PRINTBRM is not in the PATHstrCommandLine = "CMD.EXE /A /C (TITLE AllHelp " & strScriptVer & ": PRINTBRM&""" & wshShell.ExpandEnvironmentStrings( "%windir%\system32\spool\tools\PRINTBRM.EXE" ) & """ | FIND /V "":"")"
End If
If strCommand = "REGISTER-CIMPROVIDER" Then
strCommandLine = "CMD.EXE /A /C (TITLE AllHelp " & strScriptVer & ": REGISTER-CIMPROVIDER®ISTER-CIMPROVIDER -help 2>&1)"
End If
If strCommand = "RPCPING" Then
' Use MORE to remove ASCII null charactersstrCommandLine = "CMD.EXE /A /C (TITLE AllHelp " & strScriptVer & ": RPCPING&RPCPING /? 2>&1 | MORE)"
End If
If strCommand = "SC" Then
' SC requires non-directed keyboard input, so we'll add a message to the title barstrCommandLine = "CMD.EXE /A /C (TITLE AllHelp " & strScriptVer & ": SC - Press Enter to continue&SC /? 2>&1)"
End If
If strCommand = "SFC" Then
' SFC's output encoding in Windows 8 is a mess, so we need temporary files and MORE to clean up its outputstrFile = wshShell.ExpandEnvironmentStrings( "%Temp%\" & LCase( strCommand ) & ".txt" )
strCommandLine = "CMD /C (" & strCommand & " /? > """ & strFile & """ 2>&1)"
Set objExec = wshShell.Exec( strCommandLine )
objExec.Terminate
strCommandLine = "CMD /C (MORE < """ & strFile & """ > " & strFile & ".2)"
Set objExec = wshShell.Exec( strCommandLine )
objExec.Terminate
strCommandLine = "CMD /A /C (TYPE """ & strFile & ".2"")"
End If
If strCommand = "SUBINACL" Then
' SUBINACL's output is incomplete Unicode and poses quite a challenge to redirect and then read; ' so we first create an Unicode text file with 1 blank line, and then append SUBINACL's outputstrFile = wshShell.ExpandEnvironmentStrings( "%Temp%\" & LCase( strCommand ) & ".txt" )
Set objFile = objFSO.CreateTextFile( strFile, True, True )
objFile.WriteBlankLines 1
objFile.Close
strCommandLine = "CMD /C (VER | " & strCommand & " /help /full >> """ & strFile & """ 2>&1)"
Set objExec = wshShell.Exec( strCommandLine )
objExec.Terminate
Set objFile = objFSO.GetFile( strFile )
If objFile.Size < 2048 Then
Set objFile = Nothing
Set objFile = objFSO.CreateTextFile( strFile, True, True )
objFile.WriteBlankLines 1
objFile.Close
strCommandLine = "CMD /C (" & strCommand & " /? >> """ & strFile & """ 2>&1)"
Set objExec = wshShell.Exec( strCommandLine )
objExec.Terminate
End If
Set objFile = Nothing
strCommandLine = "CMD /A /C (TYPE """ & strFile & """)"
End If
' Remove ASCII null characters; trick by Austin France ' http://austinfrance.wordpress.com/2011/01/13/howto-vbscript-remove-chr0-null-from-a-string/Set objRE = New RegExp
objRE.Global = True
objRE.Pattern = "[\0]"
objRE.IgnoreCase = False
strHelp = ""
strOutput = ""
Set objExec = wshShell.Exec( strCommandLine )
strOutput = objExec.StdOut.ReadAll( )
strHelp = objRE.Replace( strOutput, "" )
objExec.Terminate
' Correct missing linefeedIf strCommand = "BITSADMIN" Then
strHelp = Replace( strHelp, "SetNotifyFlags/GETNOTIFYINTERFACE", "SetNotifyFlags" & vbCrLf & "/GETNOTIFYINTERFACE" )
End If
If strCommand = "DHCPLOC" Then
' Strip path from program nameobjRE.Pattern = "[\r\n][^\r\n]\\dhcploc\.exe \["
objRE.IgnoreCase = True
strHelp = objRE.Replace( strHelp, "DHCPLOC.EXE [" )
End If
If strCommand = "FINDLINKS" Then
' Strip path from program nameobjRE.Global = False
objRE.IgnoreCase = True
objRE.Pattern = ":(\s+)[A-Z]:\\([^\\]+\\)*FindLinks(\.exe)?" ' ":\1FindLinks"
' Remove path from commandstrHelp = objRE.Replace( strHelp, ": FINDLINKS" )
End If
If strCommand = "SFC" Then
' Convert incorrect Unicode to ASCIIstrHelp = ToASCII( strHelp )
End If
' Check if the command line returned an "unknown command" errorIf strHelp = Replace( strUnknownCommand, "MY_DUMMY_UNKNOWN_COMMAND.EXE", strCommand ) Then
If blnDebug Then DebugDisplay SuperTrim( strHelp )
strHelp = ""
End If
' Clean upSet objRE = Nothing
Set objExec = Nothing
' Return the result GetAddedCmdHelp = strHelpEnd Function
Function GetCmdHelp( myCommand )
' Get the help text for the specified command' and format it to fit in the generated HTML page Dim objExec, objRE1, objRE2, strCommand, strCommandLine, strHelpstrCommand = Trim( UCase( myCommand ) )
' Check if there is any help available at all; if not, try <command> /? instead.Set objRE1 = New RegExp
objRE1.Global = True
objRE1.Pattern = """" & strCommand & " /\?"""
objRE1.IgnoreCase = True
' Remove ASCII null characters; trick by Austin France ' http://austinfrance.wordpress.com/2011/01/13/howto-vbscript-remove-chr0-null-from-a-string/Set objRE2 = New RegExp
objRE2.Global = True
objRE2.Pattern = "[\0]"
objRE2.IgnoreCase = False
' Build the command line to extract the help textstrCommandLine = "CMD.EXE /A /C (TITLE AllHelp " & strScriptVer & ": " & strCommand & "&HELP " & strCommand & ")"
If strCommand = "SC" Then
strCommandLine = "CMD.EXE /A /C (TITLE AllHelp " & strScriptVer & ": SC - Press Enter to continue&HELP SC)"
If Not blnQuiet Then
WScript.Echo vbCrLf & "AllHelp " & strScriptVer & ":" & vbCrLf & vbCrLf & "Press Enter to continue . . ."
End If
End If
Set objExec = wshShell.Exec( strCommandLine )
strHelp = objRE2.Replace( objExec.StdOut.ReadAll, "" )
objExec.Terminate
' Check if there is any help available at all; if not, try <command> /? instead.If objRE1.Test( strHelp ) Then strHelp = GetAddedCmdHelp( strCommand )
' Clean upSet objRE1 = Nothing
Set objRE2 = Nothing
Set objExec = Nothing
' Return the result GetCmdHelp = strHelpEnd Function
Function GetCodePage( )
Dim arrCodePage, idxCodePage, numCodePage, objExec, strCodePagenumCodePage = 0
'On Error Resume NextSet objExec = wshShell.Exec( "CMD.EXE /C CHCP" )
strCodePage = objExec.StdOut.ReadAll( )
arrCodePage = Split( strCodePage, " " )
If IsArray( arrCodePage ) Then
idxCodePage = UBound( arrCodePage )
numCodePage = CInt( arrCodePage( idxCodePage ) )
End If
'objExec.TerminateSet objExec = Nothing
On Error Goto 0
GetCodePage = numCodePageEnd Function
Function GetCommandError( )
' Get the OS' message text for non-existing commands Dim objExec, strCommandLine, strErrorstrCommandLine = "CMD.EXE /A /C (TITLE AllHelp " & strScriptVer & ": TESTING&MY_DUMMY_UNKNOWN_COMMAND.EXE /? 2>&1)"
Set objExec = wshShell.Exec( strCommandLine )
strError = objExec.StdOut.ReadAll
objExec.Terminate
Set objExec = Nothing
GetCommandError = strErrorEnd Function
Function GetFileDescription( myCommand )
' Find a command file and get its file description Dim objFolder, objItem, objShell, strDescription, strFile, strFolderGetFileDescription = ""
' First check if the file description is available in the dictionary we created for %windir%\system32\*.exe filesIf Not dicSystemFiles.Item( UCase( myCommand ) & ".EXE" ) = "" Then
GetFileDescription = dicSystemFiles.Item( UCase( myCommand ) & ".EXE" )
ElseIf Left( strNumVer, InStr( strNumVer, "." ) - 1 ) > 5 Then ' Vista and later
' Get th fully qualified path for the commandIf myCommand = "PRINTBMR" Then
strFile = wshShell.ExpandEnvironmentStrings( "%windir%\system32\spool\tools\PRINTBMR.EXE" )
ElsestrFile = Which( myCommand )
End If
' Get its file description (this is SLOW for directories with many files, i.e. %windir%\system32)If objFSO.FileExists( strFile ) Then
' Based on code by Allen on the KiXtart forum: ' http://www.kixtart.org/forums/ubbthreads.php?ubb=showflat&Number=160880strFolder = objFSO.GetParentFolderName( strFile )
Set objShell = CreateObject( "Shell.Application" )
Set objFolder = objShell.NameSpace( strFolder )
For Each objItem In objFolder.Items
If UCase( objItem.Name ) = UCase( myCommand & ".EXE" ) Then
strDescription = objFolder.GetDetailsOf( objItem, 34 ) ' Vista and later
strDescription = SuperTrim( strDescription )
GetFileDescription = strDescriptionEnd If
NextSet objFolder = Nothing
Set objShell = Nothing
End If
End if
End If
End Function
Function GetOSLanguage( myLocale )
' Get the description for the OS language/locale numberDim i, arrOSLanguage(20490)
For i = 0 To 20490
arrOSLanguage(i) = ""
NextarrOSLanguage(1) = "Arabic"
arrOSLanguage(4) = "Chinese (Simplified) - China"
arrOSLanguage(9) = "English"
arrOSLanguage(1025) = "Arabic - Saudi Arabia"
arrOSLanguage(1026) = "Bulgarian"
arrOSLanguage(1027) = "Catalan"
arrOSLanguage(1028) = "Chinese (Traditional) - Taiwan"
arrOSLanguage(1029) = "Czech"
arrOSLanguage(1030) = "Danish"
arrOSLanguage(1031) = "German - Germany"
arrOSLanguage(1032) = "Greek"
arrOSLanguage(1033) = "English - United States"
arrOSLanguage(1034) = "Spanish - Traditional Sort"
arrOSLanguage(1035) = "Finnish"
arrOSLanguage(1036) = "French - France"
arrOSLanguage(1037) = "Hebrew"
arrOSLanguage(1038) = "Hungarian"
arrOSLanguage(1039) = "Icelandic"
arrOSLanguage(1040) = "Italian - Italy"
arrOSLanguage(1041) = "Japanese"
arrOSLanguage(1042) = "Korean"
arrOSLanguage(1043) = "Dutch - Netherlands"
arrOSLanguage(1044) = "Norwegian - Bokmal"
arrOSLanguage(1045) = "Polish"
arrOSLanguage(1046) = "Portuguese - Brazil"
arrOSLanguage(1047) = "Rhaeto-Romanic"
arrOSLanguage(1048) = "Romanian"
arrOSLanguage(1049) = "Russian"
arrOSLanguage(1050) = "Croatian"
arrOSLanguage(1051) = "Slovak"
arrOSLanguage(1052) = "Albanian"
arrOSLanguage(1053) = "Swedish"
arrOSLanguage(1054) = "Thai"
arrOSLanguage(1055) = "Turkish"
arrOSLanguage(1056) = "Urdu"
arrOSLanguage(1057) = "Indonesian"
arrOSLanguage(1058) = "Ukrainian"
arrOSLanguage(1059) = "Belarusian"
arrOSLanguage(1060) = "Slovenian"
arrOSLanguage(1061) = "Estonian"
arrOSLanguage(1062) = "Latvian"
arrOSLanguage(1063) = "Lithuanian"
arrOSLanguage(1065) = "Persian"
arrOSLanguage(1066) = "Vietnamese"
arrOSLanguage(1069) = "Basque"
arrOSLanguage(1070) = "Serbian"
arrOSLanguage(1071) = "Macedonian (FYROM)"
arrOSLanguage(1072) = "Sutu"
arrOSLanguage(1073) = "Tsonga"
arrOSLanguage(1074) = "Tswana"
arrOSLanguage(1076) = "Xhosa"
arrOSLanguage(1077) = "Zulu"
arrOSLanguage(1078) = "Afrikaans"
arrOSLanguage(1080) = "Faeroese"
arrOSLanguage(1081) = "Hindi"
arrOSLanguage(1082) = "Maltese"
arrOSLanguage(1084) = "Gaelic"
arrOSLanguage(1085) = "Yiddish"
arrOSLanguage(1086) = "Malay - Malaysia"
arrOSLanguage(2049) = "Arabic - Iraq"
arrOSLanguage(2052) = "Chinese (Simplified) - PRC"
arrOSLanguage(2055) = "German - Switzerland"
arrOSLanguage(2057) = "English - United Kingdom"
arrOSLanguage(2058) = "Spanish - Mexico"
arrOSLanguage(2060) = "French - Belgium"
arrOSLanguage(2064) = "Italian - Switzerland"
arrOSLanguage(2067) = "Dutch - Belgium"
arrOSLanguage(2068) = "Norwegian - Nynorsk"
arrOSLanguage(2070) = "Portuguese - Portugal"
arrOSLanguage(2072) = "Romanian - Moldova"
arrOSLanguage(2073) = "Russian - Moldova"
arrOSLanguage(2074) = "Serbian - Latin"
arrOSLanguage(2077) = "Swedish - Finland"
arrOSLanguage(3073) = "Arabic - Egypt"
arrOSLanguage(3076) = "Chinese (Traditional) - Hong Kong SAR"
arrOSLanguage(3079) = "German - Austria"
arrOSLanguage(3081) = "English - Australia"
arrOSLanguage(3082) = "Spanish - International Sort"
arrOSLanguage(3084) = "French - Canada"
arrOSLanguage(3098) = "Serbian - Cyrillic"
arrOSLanguage(4097) = "Arabic - Libya"
arrOSLanguage(4100) = "Chinese (Simplified) - Singapore"
arrOSLanguage(4103) = "German - Luxembourg"
arrOSLanguage(4105) = "English - Canada"
arrOSLanguage(4106) = "Spanish - Guatemala"
arrOSLanguage(4108) = "French - Switzerland"
arrOSLanguage(5121) = "Arabic - Algeria"
arrOSLanguage(5127) = "German - Liechtenstein"
arrOSLanguage(5129) = "English - New Zealand"
arrOSLanguage(5130) = "Spanish - Costa Rica"
arrOSLanguage(5132) = "French - Luxembourg"
arrOSLanguage(6145) = "Arabic - Morocco"
arrOSLanguage(6153) = "English - Ireland"
arrOSLanguage(6154) = "Spanish - Panama"
arrOSLanguage(7169) = "Arabic - Tunisia"
arrOSLanguage(7177) = "English - South Africa"
arrOSLanguage(7178) = "Spanish - Dominican Republic"
arrOSLanguage(8193) = "Arabic - Oman"
arrOSLanguage(8201) = "English - Jamaica"
arrOSLanguage(8202) = "Spanish - Venezuela"
arrOSLanguage(9217) = "Arabic - Yemen"
arrOSLanguage(9226) = "Spanish - Colombia"
arrOSLanguage(10241) = "Arabic - Syria"
arrOSLanguage(10249) = "English - Belize"
arrOSLanguage(10250) = "Spanish - Peru"
arrOSLanguage(11265) = "Arabic - Jordan"
arrOSLanguage(11273) = "English - Trinidad"
arrOSLanguage(11274) = "Spanish - Argentina"
arrOSLanguage(12289) = "Arabic - Lebanon"
arrOSLanguage(12298) = "Spanish - Ecuador"
arrOSLanguage(13313) = "Arabic - Kuwait"
arrOSLanguage(13322) = "Spanish - Chile"
arrOSLanguage(14337) = "Arabic - U.A.E."
arrOSLanguage(14346) = "Spanish - Uruguay"
arrOSLanguage(15361) = "Arabic - Bahrain"
arrOSLanguage(15370) = "Spanish - Paraguay"
arrOSLanguage(16385) = "Arabic - Qatar"
arrOSLanguage(16394) = "Spanish - Bolivia"
arrOSLanguage(17418) = "Spanish - El Salvador"
arrOSLanguage(18442) = "Spanish - Honduras"
arrOSLanguage(19466) = "Spanish - Nicaragua"
arrOSLanguage(20490) = "Spanish - Puerto Rico"
If Trim( myLocale ) = "" Then
GetOSLanguage = arrOSLanguage( GetLocale( ) )
ElseGetOSLanguage = arrOSLanguage( myLocale )
End If
End Function
Sub GetSystemFileDescriptions( )
' List file names and descriptions for all *.exe files in %windir%\system32 Dim objFolder, objItem, objShell, strDescription, strFile, strFolderstrFolder = objFSO.GetParentFolderName( strFile )
Set objShell = CreateObject( "Shell.Application" )
Set objFolder = objShell.NameSpace( wshShell.ExpandEnvironmentStrings( "%windir%\system32" ) )
For Each objItem In objFolder.Items
strFile = UCase( objItem.Name )
If UCase( objFSO.GetExtensionName( strFile ) ) = "EXE" Then
strDescription = objFolder.GetDetailsOf( objItem, 34 ) ' Vista and later
strDescription = SuperTrim( strDescription )
dicSystemFiles.Item( objItem.Name ) = strDescription
End If
NextSet objFolder = Nothing
Set objShell = Nothing
End Sub
Function HTMLFoot( )
' Create the foot for the HTML pageHTMLFoot = "<p> </p>" & vbCrLf & vbCrLf _
& "<div style=""text-align: center;"">" & vbCrLf _
& "<p>This HTML help file was generated by <a href=""http://www.robvanderwoude.com/wshexamples.php?fc=A#AllHelp"">AllHelp.vbs</a>, Version " & strScriptVer & "<br />" & vbCrLf _
& "Written by Rob van der Woude<br />" & vbCrLf _
& "<a href=""http://www.robvanderwoude.com"">http://www.robvanderwoude.com</a></p>" & vbCrLf _
& "</div>" & vbCrLf & vbCrLf _
& "</div>" & vbCrLf & vbCrLf _
& "</div>" & vbCrLf & vbCrLf _
& "<script type=""text/javascript"">" & vbCrLf _
& "getDefaultAnchorColor( );" & vbCrLf _
& "</script>" & vbCrLf & vbCrLf _
& "</body>" & vbCrLf _
& "</html>"
End Function
Function HTMLHead( )
' Create the head for the HTML pageHTMLHead = "<!DOCTYPE HTML>" & vbCrLf _
& "<html>" & vbCrLf _
& "<head>" & vbCrLf
Select Case intCodePage
Case 437:
HTMLHead = HTMLHead & "<meta http-equiv=""Content-Type"" content=""text/html;charset=IBM437"" />" & vbCrLf
Case 850:
HTMLHead = HTMLHead & "<meta http-equiv=""Content-Type"" content=""text/html;charset=IBM850"" />" & vbCrLf
Case 1252:
HTMLHead = HTMLHead & "<meta http-equiv=""Content-Type"" content=""text/html;charset=windows-1252"" />" & vbCrLf
End Select
HTMLHead = HTMLHead _& "<title>Help for all " & strWinVer & " " & strCSDVer & " commands</title>" & vbCrLf _
& "<meta name=""generator"" content=""AllHelp.vbs, Version " & strScriptVer & ", by Rob van der Woude, www.robvanderwoude.com"" />" & vbCrLf _
& "<meta name=""viewport"" content=""width=device-width; initial-scale=1"" />" & vbCrLf _
& "<style type=""text/css"">" & vbCrLf _
& "a, a.visited" & vbCrLf _
& "{" & vbCrLf _
& vbTab & "color: blue;" & vbCrLf _
& "}" & vbCrLf & vbCrLf _
& "td.Command" & vbCrLf _
& "{" & vbCrLf _
& vbTab & "vertical-align: top;" & vbCrLf _
& vbTab & "padding-left: 10px;" & vbCrLf _
& vbTab & "padding-right: 5px;" & vbCrLf _
& vbTab & "font-weight: bold;" & vbCrLf _
& vbTab & "white-space: nowrap;" & vbCrLf _
& "}" & vbCrLf & vbCrLf _
& "th" & vbCrLf _
& "{" & vbCrLf _
& vbTab & "vertical-align: top;" & vbCrLf _
& "}" & vbCrLf & vbCrLf _
& "table.Alphabet" & vbCrLf _
& "{" & vbCrLf _
& vbTab & "border: 2px solid blue;" & vbCrLf _
& vbTab & "margin: 0 auto 0 auto;" & vbCrLf _
& vbTab & "text-align: center;" & vbCrLf _
& vbTab & "vertical-align: middle;" & vbCrLf _
& vbTab & "width: 100%;" & vbCrLf _
& "}" & vbCrLf & vbCrLf _
& "table.Alphabet th" & vbCrLf _
& "{" & vbCrLf _
& vbTab & "padding: 5px;" & vbCrLf _
& vbTab & "width: 4%;" & vbCrLf _
& "}" & vbCrLf & vbCrLf _
& "table.List" & vbCrLf _
& "{" & vbCrLf _
& vbTab & "margin: 0 auto 0 auto;" & vbCrLf _
& vbTab & "width: 100%;" & vbCrLf _
& "}" & vbCrLf & vbCrLf _
& "table.List th" & vbCrLf _
& "{" & vbCrLf _
& vbTab & "background-color: blue;" & vbCrLf _
& vbTab & "color: white;" & vbCrLf _
& vbTab & "font-size: 120%;" & vbCrLf _
& vbTab & "font-weight: bold;" & vbCrLf _
& vbTab & "padding-left: 10px;" & vbCrLf _
& "}" & vbCrLf & vbCrLf _
& "pre" & vbCrLf _
& "{" & vbCrLf _
& vbTab & "white-space: pre-wrap;" & vbCrLf _
& "}" & vbCrLf _
& "</style>" & vbCrLf & vbCrLf _
& "<script type=""text/javascript"">" & vbCrLf _
& "var defaultColor;" & vbCrLf _
& "function getDefaultAnchorColor( ) {" & vbCrLf _
& vbTab & "var addchr = document.getElementsByClassName( 'AdditionalChar' );" & vbCrLf _
& vbTab & "for ( var i = 0; i < addchr.length; i++ ) {" & vbCrLf _
& vbTab & vbTab & "defaultColor = addchr[i].style.color;" & vbCrLf _
& vbTab & "}" & vbCrLf _
& "}" & vbCrLf _
& "function toggleVisibility( ) {" & vbCrLf _
& vbTab & "var button = document.getElementById( 'WinOnlyButton' );" & vbCrLf _
& vbTab & "var addchr = document.getElementsByClassName( 'AdditionalChar' );" & vbCrLf _
& vbTab & "var addcmd = document.getElementsByClassName( 'Additional' );" & vbCrLf _
& vbTab & "var addhlp = document.getElementsByClassName( 'AdditionalHelp' );" & vbCrLf _
& vbTab & "if ( button.value == 'Windows Help Only' ) {" & vbCrLf _
& vbTab & vbTab & "button.value = 'All Commands';" & vbCrLf _
& vbTab & vbTab & "for ( var i = 0; i < addchr.length; i++ ) {" & vbCrLf _
& vbTab & vbTab & vbTab & "addchr[i].style.color = 'gray';" & vbCrLf _
& vbTab & vbTab & "}" & vbCrLf _
& vbTab & vbTab & "for ( var i = 0; i < addchr.length; i++ ) {" & vbCrLf _
& vbTab & vbTab & vbTab & "addchr[i].style.color = 'gray';" & vbCrLf _
& vbTab & vbTab & "}" & vbCrLf _
& vbTab & vbTab & "for ( var i = 0; i < addcmd.length; i++ ) {" & vbCrLf _
& vbTab & vbTab & vbTab & "addcmd[i].style.display = 'none';" & vbCrLf _
& vbTab & vbTab & "}" & vbCrLf _
& vbTab & vbTab & "for( var i = 0; i < addhlp.length; i++ ) {" & vbCrLf _
& vbTab & vbTab & vbTab & "addhlp[i].style.display = 'none';" & vbCrLf _
& vbTab & vbTab & "}" & vbCrLf _
& vbTab & "} else {" & vbCrLf _
& vbTab & vbTab & "button.value = 'Windows Help Only'" & vbCrLf _
& vbTab & vbTab & "for( var i = 0; i < addchr.length; i++ ) {" & vbCrLf _
& vbTab & vbTab & vbTab & "addchr[i].style.color = defaultColor;" & vbCrLf _
& vbTab & vbTab & "}" & vbCrLf _
& vbTab & vbTab & "for( var i = 0; i < addcmd.length; i++ ) {" & vbCrLf _
& vbTab & vbTab & vbTab & "addcmd[i].style.display = 'table-row';" & vbCrLf _
& vbTab & vbTab & "}" & vbCrLf _
& vbTab & vbTab & "for( var i = 0; i < addhlp.length; i++ ) {" & vbCrLf _
& vbTab & vbTab & vbTab & "addhlp[i].style.display = 'block';" & vbCrLf _
& vbTab & vbTab & "}" & vbCrLf _
& vbTab & "}" & vbCrLf _
& "}" & vbCrLf _
& "</script>" & vbCrLf & vbCrLf _
& "</head>" & vbCrLf & vbCrLf _
& "<body>" & vbCrLf & vbCrLf _
& "<div style=""text-align: center;"">" & vbCrLf _
& "<h1>" & strWinVer & " " & Trim( strCSDVer ) & "</h1>" & vbCrLf _
& "<h2>Version " & strNumVer & " (" & intBitsOS & " bits)</h2>" & vbCrLf _
& "<h3>" & GetOSLanguage( strOSLocl ) & "</h3>" & vbCrLf _
& "</div>" & vbCrLf & vbCrLf _
& "<p> </p>" & vbCrLf & vbCrLf _
& "<div style=""width: 50em; text-align: center; margin: 0 auto 0 auto;"">" & vbCrLf & vbCrLf _
& "<div style=""width: 50em; text-align: left;"">" & vbCrLf & vbCrLf
End Function
Function IsAdmin( )
' Based on code by Denis St-Pierre Dim intAnswer, intButtons, intRC Dim objUAC Dim strMsg, strTitleIsAdmin = False
On Error Resume Next
intRC = wshShell.Run( "CMD /C OPENFILES > NUL 2>&1", 7, True )
If Err Then intRC = 1
On Error Goto 0
If intRC = 0 Then
IsAdmin = True
ElseIf InStr( UCase( strCommandLine ), "/NOADMIN" ) > 0 Then
IsAdmin = True
Exit Function
End If
strTitle = "Elevated Privileges Required"
intButtons = vbYesNoCancel + vbApplicationModal
strMsg = "This script requires elevated privileges." & vbCrLf & vbCrLf & vbCrLf & vbCrLf _
& "Note:" & vbTab & "On some 64-bit systems, you may get this message whether" & vbCrLf _
& vbTab & "running with elevated privileges or not." & vbCrLf & vbCrLf _
& vbTab & "This MAY be caused by running the script with the 32-bit version" & vbCrLf _
& vbTab & "of " & UCase( objFSO.GetFileName( strScriptEngine ) ) & " (%windir%\SysWOW64\" & objFSO.GetFileName( strScriptEngine ) & ")." & vbCrLf & vbCrLf _
& vbTab & "In that case, add the path to the proper (64-bit) " & UCase( objFSO.GetFileName( strScriptEngine ) ) & " to" & vbCrLf _
& vbTab & "this script's command line:" & vbCrLf & vbCrLf _
& vbTab & """%windir%\system32\" & objFSO.GetFileName( strScriptEngine ) & """ """ & strScriptPath & """" & vbCrLf & vbCrLf & vbCrLf & vbCrLf _
& "Do you want to restart the script with elevated privileges now?" & vbCrLf & vbCrLf _
& "Yes:" & vbtab & "Restart the script with elevated privileges" & vbCrLf _
& "No:" & vbTab & "Try to continue without elevated privileges (NOT recommended)" & vbCrLf _
& "Cancel:" & vbTab & "Abort"
intAnswer = MsgBox( strMsg, intButtons, strTitle )
If intAnswer = vbYes Then
strCommandLine = Replace( Trim( strCommandLine ), """", """""" )
' Elevate privilegesSet objUAC = CreateObject( "Shell.Application" )
objUAC.ShellExecute """" & strScriptEngine & """", """" & strScriptPath & """ /NOADMIN " & strCommandLine, "", "runas", 1
Set objUAC = Nothing
WScript.Quit 0
ElseIf intAnswer = vbNo Then
IsAdmin = True
ElseWScript.Quit 1
End If
End If
End Function
Function Max( num1, num2 )
' Return the largest of 2 numbersIf num1 > num2 Then
Max = num1 Else Max = num2End If
End Function
Function Min( num1, num2 )
' Return the smallest of 2 numbersIf num1 < num2 Then
Min = num1 Else Min = num2End If
End Function
Function SortDictionary( objDict, intSort )
' Sort a Dictionary object' Code found on http://support.microsoft.com/kb/246067Dim arrDict( )
Dim objKey Dim strKey, strItem Dim i,j,intCount ' Get the dictionary countintCount = objDict.Count
' We need more than one item to warrant sortingIf intCount > 1 Then
' create an array to store dictionary informationReDim arrDict( intCount, 2 )
i = 0
' Populate the string arrayFor Each objKey In objDict
arrDict( i, dictKey ) = CStr( objKey )
arrDict( i, dictItem ) = CStr( objDict( objKey ) )
i = i + 1
Next ' Perform a shell sort of the string arrayFor i = 0 to ( intCount - 2 )
For j = i to ( intCount - 1 )
If StrComp( arrDict( i, intSort ), arrDict( j, intSort ),vbTextCompare ) > 0 Then
strKey = arrDict( i, dictKey )
strItem = arrDict( i, dictItem )
arrDict( i, dictKey ) = arrDict( j, dictKey )
arrDict( i, dictItem ) = arrDict( j, dictItem )
arrDict( j, dictKey ) = strKey
arrDict( j, dictItem ) = strItem
End If
Next Next ' Erase the contents of the dictionary objectobjDict.RemoveAll
' Repopulate the dictionary with the sorted informationFor i = 0 to ( intCount - 1 )
objDict.Add arrDict( i, dictKey ), arrDict( i, dictItem )
NextEnd If
End Function
Function SuperTrim( myText )
' Remove linefeeds, tabs and multple spaces from a text Dim strTextstrText = Replace( myText, vbCr, " " )
strText = Replace( strText, vbLf, " " )
strText = Replace( strText, vbCrLf, " " )
strText = Replace( strText, vbTab, " " )
While ( InStr( strText, " " ) )
strText = Replace( strText, " ", " " )
WendSuperTrim = Trim( strText )
End Function
Sub Syntax' Display help and, optionally, debugging informationstrMsg = strMsg & vbCrLf _
& "AllHelp.vbs, Version " & strScriptVer _
& vbCrLf _& "Display help for ""all"" Windows commands, for" _
& vbCrLf _& "the current Windows installion and language." _
& vbCrLf & vbCrLf _
& "Usage: ALLHELP.VBS [ ""outputfile"" ] [ /Y ] [ /WHO ] [ /BAT ] [ /DEBUG ]" _
& vbCrLf & vbCrLf _
& " or: ALLHELP.VBS /Q [ /WHO ] [ /BAT ] [ > ""outputfile"" ]" _
& vbCrLf & vbCrLf _
& "Where: ""outputfile"" is the fully qualified path of the HTML file to be" _
& vbCrLf _& " created (default: ""allhelp.html"" in ""My Documents"")" _
& vbCrLf _& " /DEBUG display DEBUGging information" _
& vbCrLf _& " /BAT include BATch files (.bat and .cmd)" _
& vbCrLf _& " /Q display only the HTML code, do not write to file" _
& vbCrLf _& " /WHO show commands listed in Windows' Help Only" _
& vbCrLf _& " /Y overwrite existing file (default: abort if exists)" _
& vbCrLf & vbCrLf _
& "Notes: DISKPART and OPENFILES are protected by UAC; in order to retrieve" _
& vbCrLf _& " their help texts, run this script with elevated privileges." _
& vbCrLf _& " SC help requires keyboard input; its window title will ask you to" _
& vbCrLf _& " press Enter." _
& vbCrLf _& " The /Q switch can be used as a work-around to redirect the generated HTML" _
& vbCrLf _& " to a file in case of unexpected ""access denied"" errors in Windows 8.1." _
& vbCrLf & vbCrLf _
& "Written by Rob van der Woude" _
& vbCrLf _& "http://www.robvanderwoude.com"
WScript.Echo strMsg
WScript.Quit 1
End Sub
Function ToASCII( myString )
' Strip special characters from SFC's output in Windows 8.1 Dim objRE, strText strText = myStringSet objRE = New RegExp
objRE.Global = True
objRE.Pattern = "^" & Chr(255) & Chr(254)
strText = objRE.Replace( strText, "" )
objRE.Pattern = "[\0]"
strText = objRE.Replace( strText, "" )
Set objRE = Nothing
ToASCII = strTextEnd Function
Function TrimCrLf( myString )
' Remove unnnecessary linefeeds inside <pre></pre> blocks Dim objMatches, objRE, strResultstrResult = Trim( myString )
If strResult = "" Then Exit Function
Set objRE = New RegExp
objRE.Global = True
objRE.Pattern = "<pre>(" & vbCr & "|" & vbLf & ")+"
strResult = objRE.Replace( strResult, "<pre>" )
objRE.Pattern = "(" & vbCr & "|" & vbLf & ")+</pre>"
strResult = objRE.Replace( strResult, "</pre>" )
Set objRE = Nothing
strResult = Replace( strResult, vbCr & vbCrLf, vbCrLf )
TrimCrLf = strResultEnd Function
Function Which( myCommand )
' Get the fully qualified path to a command file Dim arrPath, arrPathExt Dim i, j Dim objRE Dim strComSpec, strPath, strPathExt, strTestPathWhich = ""
' Read the PATH and PATHEXT variables, and store their values in arrays; the current directory is prepended to the PATH firststrPath = wshShell.CurrentDirectory & ";" & wshShell.ExpandEnvironmentStrings( "%PATH%" )
strPathExt = wshShell.ExpandEnvironmentStrings( "%PATHEXT%" )
If blnIgnoreBatch Then
' Remove .BAT and .CMD from %PATHEXT% to avoid listing batch filesSet objRE = New RegExp
objRE.Global = True
objRE.IgnoreCase = True
objRE.Pattern = "(\.bat|\.cmd)"
strPathExt = objRE.Replace( strPathExt, "" )
objRE.Pattern = "(^;|;$)"
strPathExt = objRE.Replace( strPathExt, "" )
objRE.Pattern = ";+"
strPathExt = objRE.Replace( strPathExt, ";" )
Set objRE = Nothing
End If
arrPath = Split( strPath, ";" )
arrPathExt = Split( strPathExt, ";" )
' But first let's check for INTERNAL commandsIf arrIntCmd.Contains( UCase( myCommand ) ) Then
' Abort at the first match, return the path to the command processorWhich = wshShell.ExpandEnvironmentStrings( "%COMSPEC%" ) ' & " /C " & arrIntCmd(i)
Exit Function
End If
' Use list of valid extensions from PATHEXTFor i = 0 To UBound( arrPathExt )
' Search the PATHFor j = 0 To UBound( arrPath )
' Skip empty directory values, caused by the PATH variable being terminated with a semicolonIf arrPath(j) <> "" Then
' Build a fully qualified path of the file to test forstrTestPath = objFSO.BuildPath( arrPath(j), myCommand & arrPathExt(i) )
' Check if that file existsIf objFSO.FileExists( strTestPath ) Then
' Abort at the first matchWhich = objFSO.GetAbsolutePathName( strTestPath )
Exit Function
End If
End If
Next NextEnd Function
page last modified: 2025-10-11; loaded in 0.0512 seconds