If a file that you want to parse has command control characters, like an HTML file, the CMD.EXE processor will treat
these characters as controls, causing your script to malfunction.
The ! % ^ & | " characters have special meaning to the CMD.EXE processor, as well as the = ; ( ) , : ' characters, when used in various combinations.
Your script is also NOT able to detect TAB characters.
I have scripted CMDCTRL.bat, CMDCTRLdo.vbs, and CMDCTRLundo.vbs to allow a batch job to process a file that contains command control characters, by creating a new file in which the command control characters have been replaced, using the following table.
Control Character | ! | % | ^ | & | | | > | " | = | ; | ( | ) | , | : | ' | TAB | |
Resulting Character | ¡ | ¥ | Þ | ¦ | ü | ¼ | ¾ | ¢ | ½ | » | ¨ | © | ¬ | º | ± | « |
Keystrokes (Numeric Keypad) ALT+ |
0161 | 0165 | 0222 | 0166 | 0252 | 0188 | 0190 | 0162 | 0189 | 0187 | 0168 | 0169 | 0172 | 0186 | 0177 | 0171 |
The syntax for using CMDCTRL.bat is:
CALL CMDCTRL iFile oFile \[/U\]
Where:
iFile is the fully qualified file name of the input file that contains the command Control Characters. oFile is the fully qualified file name of the output file that will Resulting Characters /U is an optional switch that will reverse the operation, converting an iFile that contains Resulting Characters to an oFile that contains command Control Characters.NOTE: CMDCTRL.bat, CMDCTRLdo.vbs, and CMDCTRLundo.vbs must all be located in the same folder.
NOTE: For an alternate method, see How can a batch job process files that contain command control and TAB characters?
CMDCTRL.bat contains:
@echo off setlocal if \{%2\}\{\} goto err1 if not exist %1 goto err2 if exist %2 del /q /f %2 set iFile=%1 set oFile=%2 if /i %ifile% EQU %ofile% goto err3 if \{%3\}
\{\} goto doit if /i \{%3\}==\{/U\} goto undoit :err1 @echo Syntax: CMDCTRL iFile oFile /U endlocal goto :EOF :err2 @echo CMDCTRL - %1 NOT found. endlocal goto :EOF :err3 @echo CMDCTRL - %1 is the same file as %2. endlocal goto :EOF :doit set vbs="%~DP0CMDCTRLdo.vbs" cscript //nologo %vbs% %iFile% %oFile% endlocal goto :EOF :undoit set vbs="%~DP0CMDCTRLundo.vbs" cscript //nologo %vbs% %iFile% %oFile% endlocal
CMDCTRLdo.vbs contains:
dim fso, iFile, oFile,rFile, wFile dim iString, oString Dim objArguments Set objArguments = Wscript.Arguments iFile=objArguments(0) oFile=objArguments(1) set fso = CreateObject("Scripting.FileSystemObject") set rfile = fso.OpenTextFile(iFile, 1, false) set wFile = fso.CreateTextFile(oFile, 2) Do until rFile.AtEndOfStream = True iString = rFile.ReadLine oString = Replace(iString, "!", "¡") oString = Replace(oString, "%", "¥") oString = Replace(oString, "^", "Þ") oString = Replace(oString, "&", "¦") oString = Replace(oString, "|", "ü") oString = Replace(oString, "", "¾") oString = Replace(oString,") oString = Replace(oString, "½", "=") oString = Replace(oString, "»", ";") oString = Replace(oString, "¨", "(") oString = Replace(oString, "©", ")") oString = Replace(oString, "¬", ",") oString = Replace(oString, "º", ":") oString = Replace(oString, "±", "'") oString = Replace(oString, "«", vbtab) wFile.writeLine oString loop rFile.close wFile.close", "¢") oString = Replace(oString, "=", "½") oString = Replace(oString, ";", "»") oString = Replace(oString, "(", "¨") oString = Replace(oString, ")", "©") oString = Replace(oString, ",", "¬") oString = Replace(oString, ":", "º") oString = Replace(oString, "'", "±") oString = Replace(oString, vbtab, "«") wFile.writeLine oString loop rFile.close wFile.close CMDCTRLundo.vbs contains:
dim fso, iFile, oFile,rFile, wFile dim iString, oString Dim objArguments Set objArguments = Wscript.Arguments iFile=objArguments(0) oFile=objArguments(1) set fso = CreateObject("Scripting.FileSystemObject") set rfile = fso.OpenTextFile(iFile, 1, false) set wFile = fso.CreateTextFile(oFile, 2) Do until rFile.AtEndOfStream = True iString = rFile.ReadLine oString = Replace(iString, "¡", "!") oString = Replace(oString, "¥", "%") oString = Replace(oString, "Þ", "^") oString = Replace(oString, "¦", "&") oString = Replace(oString, "ü", "|") oString = Replace(oString, "¼", "") oString = Replace(oString, "¢",