
| ||||||||||||||||||||||||||||||||||||||

| ||||||||||||||||||||||||||||||||||||||||||||||||||
| ShowParams.exe (written in c) |
|---|
|
>ShowParams.exe "c:\test a\" "c:\test b\"
param 0 = ShowParams.exe param 1 = c:\test a" c:\test param 2 = b" |
| C#ShowParams.exe (written in C#) |
|---|
|
>C#ShowParams.exe "c:\test a\" "c:\test b\"
There are 2 program arguments c:\test a" c:\test b" |
| ShowParams.bat (a batch file) |
|---|
|
>ShowParams.bat "c:\test a\" "c:\test b\"
param 1 = "c:\test a\" param 2 = "c:\test b\" |
| ShowParams.vbs (a Visual Basic script) |
|---|
|
>ShowParams.vbs "c:\test a\" "c:\test b\"
param 0 = c:\test a\ param 1 = c:\test b\ |
| ||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||
| Use | " | to start/end a double quoted part |
| Use | \" | to insert a literal " |
| Use | \\" | to insert a \ then start or end a double quoted part |
| Use | \\\" | to insert a literal \" |
| Use | \ | to insert a literal \ |
Command-Line |
argv[1] |
Comment |
|---|---|---|
CallMeIshmael |
CallMeIshmael |
a plain parameter can contain any characters except {space} {tab} \ " |
┌───────────────┐
|
|
|
┌──────┐
|
|
|
CallMe\"Ishmael
|
CallMe"Ishmael
|
|
┌───────────────┐
|
|
|
┌─────────────────┐
|
|
|
┌─────────────────┐
|
|
|
a\\\b |
a\\\b |
backslashes not followed immediately by a double quotation mark are interpreted literally |
"a\\\b" |
a\\\b |
whether or not the backslashes are in a double quoted part |
Command-Line |
argv[1] |
Comment |
|---|---|---|
┌───────────────────┐
|
|
|
┌───────────┐
|
|
|
┌───────────────┐
|
|
|
Command-Line Input |
argv[1] |
argv[2] |
argv[3] |
Comment |
|---|---|---|---|---|
┌─────┐ |
┌─────┐ |
|
|
|
┌─────┐ ┌──┐ |
┌────┐ |
┌─┐ |
|
\" → " |
↓ ┌───┐ ↓ |
|
↓ ↓ |
|
backslashes not followed immediately by a double quotation mark are interpreted literally
|
a\\\"b c d |
a\"b |
c |
d |
2n+1 backslashes before " → n backslashes + a literal " |
┌───┐↓ ↓ |
|
|
|
2n backslashes followed by a " produce n backslashes + start/end double quoted part.
|
Command-Line Input |
argv[1] |
argv[2] |
argv[3] |
Comment |
|---|---|---|---|---|
┌─────┐ |
|
"" while in a double quoted part → end double quoted part and accept 2nd " literally |
||
┌┐ ┌┐
|
|
|
|
" Begin double quoted part. |
┌┐ ↓ ↓ ┌┐
|
|
|
|
Parameters are delimited by spaces or tabs. |
┌┐ ┌───────────────┐
|
|
|
|
Parameters are delimited by spaces or tabs. |
How triple double quotes are parsed |
|---|
..."""CallMeIshmael"""...
>ShowParams.exe """CallMeIshmael"""
However, the parameter itself is not in a double quoted part: >ShowParams.exe """Call Me Ishmael"""
an alternative method is >ShowParams.exe \"CallMeIshmael\"
|
How quadruple double quotes are parsed |
|---|
...""""Call me Ishmael""""...
>ShowParams.exe """"Call Me Ishmael""""
Note quotes #7,#8 are not necessary. They contribute nothing. >ShowParams.exe """"Call Me Ishmael""
an alternative method is >ShowParams.exe "\"Call Me Ishmael\""
|
| 1. | Parse off parameter 0 (the program filename) | ||||||
| • | The entire parameter may be enclosed in double quotes (it handles double quoted parts) (Double quotes are necessary if there are any spaces or tabs in the parameter) | ||||||
| • | There is no special processing of backslashes (\) | ||||||
| 2. | Parse off next parameter: | ||||||
| a. | Skip over multiple spaces/tabs between parameters | ||||||
| LOOP | |||||||
| b. | Count the backslashes (\). Let m = number of backslashes. (m may be zero.) | ||||||
| c. | IF next character following m backslashes is a double quote: | ||||||
| If m is even (or zero) | |||||||
| if currently in a double quoted part | |||||||
| IF next character is also a " | |||||||
| move to next character (the 2nd ". This character will be added to the parameter.) | |||||||
| ELSE | |||||||
| set flag to not add this " character to the parameter | |||||||
| ENDIF | |||||||
| toggle double quoted part flag | |||||||
| else | |||||||
| set flag to not add this " character to the parameter | |||||||
| endif | |||||||
| Endif | |||||||
| m = m/2 (floor divide e.g. 0/2=0, 1/2=0, 2/2=1, 3/2=1, 4/2=2, 5/2=2, etc.) | |||||||
| ENDIF | |||||||
| d. | add m backslashes | ||||||
| e. | add this character to our parameter | ||||||
| ENDLOOP | |||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Outside of Double Quotes Escape The Essential Characters < > & | ^ |
|---|
| >ShowParams.exe !\^"#$%^&'()*+,-./0123456789:;^<=^>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^^_`abcdefghijklmnopqrstuvwxyz{^|}~
└┴┘ ▲↑_ ↑_ ↑_ ↑_ ↑_ Command Line = ShowParams.exe !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ |
| ↑_ | These characters have been escaped with ^ |
| └┴┘ | The " character has been escaped with ^ so it doesn't start a double quoted part when cmd.exe parses it.
Then ^" is escaped by \ so ShowParams.exe will see it as a literal " (Microsoft C/C++ parsing rules) The result is: \^" → cmd.exe parses to give \" → ShowParams.exe parses to give → " |
| ▲ | Note if this command line is to be put in a batch file, the % will need to be doubled. |
| Outside of Double Quotes It's OK to Escape Everything |
|---|
| >ShowParams.exe ^!^\^"^#^$^%^&^'^(^)^*^+^,^-^.^/^0^1^2^3^4^5^6^7^8^9^:^;^<^=^>^?^@^A^B^C^D^E^F^G^H^I^J^K^L^M^N^O^P^Q^R →
└┴┴┘ ▲ → ^S^T^U^V^W^X^Y^Z^[^\^]^^^_^`^a^b^c^d^e^f^g^h^i^j^k^l^m^n^o^p^q^r^s^t^u^v^w^x^y^z^{^|^}^~ Command Line = ShowParams.exe !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ |
| → | line continues |
| └┴┴┘ | The " character has been escaped with ^ so it doesn't start a double quoted part when cmd.exe parses it.
Then ^" is escaped by \ so ShowParams.exe will see it as a literal " (Microsoft C/C++ parsing rules) \ itself is escaped by ^ just for the heck of it (it's OK to escape everything). The result is: ^\^" → cmd.exe parses to give \" → ShowParams.exe parses to give → " |
| ▲ | Note if this command line is to be put in a batch file, the % will need to be doubled. |
| Inside Double Quotes Escape Nothing |
|---|
|
┌─────────────────────────────────────────────────────────────────────────────────────────────┐
│ │ >ShowParams.exe "!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~" ↑ ▲ Command Line = ShowParams.exe "!#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~" |
| " | Outside a double quoted part, when not escaped with a ^, a double quote " produces a double quote " and begins a double quoted part |
| " | Inside a double quoted part, a double quote " produces a double quote " and ends the double quoted part |
| The " character is always included as part of the parameter | |
| ↑ | Note the " character has been left out of the sequence as it would end the double quoted part. (You can't escape a " while in a double quoted part. The closest we could get would be to use ^" which would give us a ^" and not end the double quoted part.) |
| ▲ | Note if this command line is to be put in a batch file, the % will need to be doubled. |
Parameter |
Result |
Comment |
|
|---|---|---|---|
PROGRAMFILES |
→ |
PROGRAMFILES |
|
"PROGRAMFILES" |
→ |
"PROGRAMFILES" |
|
%PROGRAMFILES% |
→ |
C:\Program Files |
an environment variable |
"%PROGRAMFILES%" |
→ |
"C:\Program Files" |
" + an environment variable + " |
%XYZ% |
→ |
%XYZ% |
(if XYZ is not an environment variable) |
Example 8.1a: &<>^|()@ ! |
Parameter |
||||
|---|---|---|---|---|---|
Start with the parameter you want |
&<>^|()@ ! |
||||
| 1. | Apply the Microsoft C/C++ parsing rules | ||||
| a. |
|
nothing to replace |
|||
| b. | enclose the whole parameter in double quotes (because there's a space in the parameter) |
┌──────────┐
|
|||
| 2. | Apply the Command Prompt parsing rules (cmd.exe) | ||||
| a. | determine what cmd.exe will see as the quoted parts | ┌──────────┐
|
|||
| b. | escape the special characters not in double quoted parts:
( the escape character for cmd.exe is ^ ) |
Nothing to escape because it's all in a double quoted part |
|||
| c. | if this will be placed in a batch file, double the % characters | no % in parameter |
|||
Result: To get desired parameter use this: |
"&<>^|()@ !" |
||||
Example 8.1b: &<>^|()@ ! |
Parameter |
||||
Start with the parameter you want |
&<>^|()@ ! |
||||
| 1. | Apply the Microsoft C/C++ parsing rules | ||||
| a. |
|
nothing to replace |
|||
| b. | enclose spaces in double quotes
(A double quoted part can be anywhere within a parameter) |
&<>^|()@" "!
|
|||
| 2. | Apply the Command Prompt parsing rules (cmd.exe) | ||||
| a. | determine what cmd.exe will see as the quoted parts | ┌─┐
|
|||
| b. | escape the special characters not in double quoted parts:
( the escape character for cmd.exe is ^ ) |
┌─┐
|
|||
| c. | if this will be placed in a batch file, double the % characters | no % in parameter |
|||
Result: To get desired parameter use this: |
^&^<^>^^^|^(^)^@" "^! |
||||
Example 8.2: &<>^|@()!"&<>^|@() ! |
Parameter |
||||
|---|---|---|---|---|---|
Start with the parameter you want |
&<>^|@()!"&<>^|@()! |
||||
| 1. | Apply the Microsoft C/C++ parsing rules | ||||
| a. |
|
&<>^|@()!\"&<>^|@()!
|
|||
| b. | enclose the whole parameter in double quotes | "&<>^|@()!\"&<>^|@()!"
|
|||
| 2. | Apply the Command Prompt parsing rules (cmd.exe) | ||||
| a. | determine what cmd.exe will see as the quoted parts | ┌──────────┐ ┌───
|
|||
| we have a problem in that the final " is interpreted by cmd.exe as opening a double quoted part. To avoid this, escape that last " ( the escape character for cmd.exe is ^ ) | ┌──────────┐
|
||||
| b. | escape the other special characters not in double quoted parts:
( the escape character for cmd.exe is ^ ) |
┌──────────┐
|
c. | if this will be placed in a batch file, double the % characters | no % in parameter |
Result: To get desired parameter use this: |
"&<>^|@()!\"^&^<^>^^^|@()!^" |
||||
Another way to get the same result would be at step 1b don't enclose the parameter in double quotes, then escape all special characters including the double quote so it doesn't start a double quoted part. |
^&^<^>^^^|@()!\^"^&^<^>^^^|@()!
|
||||
Example 8.3a: &<>^|@() !"&<>^|@() ! |
Parameter |
||||
|---|---|---|---|---|---|
Start with the parameter you want (parameter includes leading and trailing double quotes, plus a double quote inside, and two spaces) |
"&<>^|@() !"&<>^|@() !" |
||||
| 1. | Apply the Microsoft C/C++ parsing rules | ||||
| a. |
|
\"&<>^|@() !\"&<>^|@() !\"
|
|||
| b. | enclose the whole parameter in double quotes | ┌──────────────────────────┐
|
|||
| 2. | Apply the Command Prompt parsing rules (cmd.exe) | ||||
| a. | determine what cmd.exe will see as the quoted parts | ┌─┐ ┌───────────┐┌───
|
|||
| we have a problem in that the final " is interpreted by cmd.exe as opening a double quoted part. To avoid this, escape that last " ( the escape character for cmd.exe is ^ ) | ┌─┐ ┌───────────┐
|
||||
| b. | escape the special characters not in double quoted parts:
( the escape character for cmd.exe is ^ ) |
┌─┐ ┌───────────┐
|
c. | if this will be placed in a batch file, double the % characters | no % in parameter |
Result: To get desired parameter use this: |
"\"^&^<^>^^^|@() !\"&<>^|@() !\"^" |
||||
Another way to get the same result would be at step 2a just escape all special characters including all double quotes so there are no double quoted parts. |
^"\^"^&^<^>^^^|@() !\^"^&^<^>^^^|@() !\^"^"
|
||||
Example 8.3b: &<>^|@() !"&<>^|@() ! |
Parameter |
||||
Start with the parameter you want (same as 3a) |
"&<>^|@() !"&<>^|@() !" |
||||
| 1. | Apply the Microsoft C/C++ parsing rules | ||||
| a. |
|
\"&<>^|@() !\"&<>^|@() !\"
|
|||
| b. | enclose spaces in double quotes
(A double quoted part can be anywhere within a parameter) |
┌─┐ ┌─┐
|
|||
| 2. | Apply the Command Prompt parsing rules (cmd.exe) | ||||
| a. | determine what cmd.exe will see as the quoted parts | ┌────────┐ ┌──┐ ┌─┐ ┌───
|
|||
| once again we have a problem in that the final " is interpreted by cmd.exe as opening a double quoted part. To avoid this, escape that last " ( the escape character for cmd.exe is ^ ) | ┌────────┐ ┌──┐ ┌─┐
|
||||
| b. | escape the other special characters not in double quoted parts:
( the escape character for cmd.exe is ^ ) |
┌────────┐ ┌──┐ ┌─┐
|
c. | if this will be placed in a batch file, double the % characters | no % in parameter |
Result: To get desired parameter use this: |
\"&<>^|@()" "!\"^&^<^>^^^|@()" "!\^" |
||||
Another way to get the same result would be at step 2a just escape all special characters including all double quotes so there are no double quoted parts. |
\^"^&^<^>^^^|@()^" ^"!\^"^&^<^>^^^|@()^" ^"!\^"
|
||||
Example 8.4a: "C:\TEST A\" |
Parameter |
||||
|---|---|---|---|---|---|
Start with the parameter you want (parameter includes double quotes and a space) |
"C:\TEST A\" |
||||
| 1. | Apply the Microsoft C/C++ parsing rules | ||||
| a. |
|
\"C:\TEST A\\\"
|
|||
| b. | enclose the whole parameter in double quotes (because there's a space in the parameter) |
┌───────────────┐
|
|||
| 2. | Apply the Command Prompt parsing rules (cmd.exe) | ||||
| a. | determine what cmd.exe will see as the quoted parts | ┌─┐ ┌┐
|
|||
| b. | escape the special characters not in double quoted parts:
( the escape character for cmd.exe is ^ ) |
No special characters to escape |
|||
| c. | if this will be placed in a batch file, double the % characters | no % in parameter |
|||
Result: To get desired parameter use this: |
"\"C:\TEST A\\\"" |
||||
Another way to get the same result would be at step 2a just escape all special characters including all double quotes so there are no double quoted parts. |
^"\^"C:\TEST A\\\^"^"
|
||||
Example 8.4b: "C:\TEST A\" |
Parameter |
||||
Start with the parameter you want (same as 4a) |
"C:\TEST A\" |
||||
| 1. | Apply the Microsoft C/C++ parsing rules | ||||
| a. |
|
\"C:\TEST A\\\"
|
|||
| b. | enclose spaces in double quotes
(A double quoted part can be anywhere within a parameter) |
\"C:\TEST" "A\\\"
|
|||
| 2. | Apply the Command Prompt parsing rules (cmd.exe) | ||||
| a. | determine what cmd.exe will see as the quoted parts | ┌───────┐ ┌────┐ \"C:\TEST" "A\\\" |
|||
| b. | escape the special characters not in double quoted parts:
( the escape character for cmd.exe is ^ ) |
It's all in double quoted parts. |
|||
| c. | if this will be placed in a batch file, double the % characters | no % in parameter |
|||
Result: To get desired parameter use this: |
\"C:\TEST" "A\\\" |
||||
Another way to get the same result would be at step 2a just escape all special characters including all double quotes so there are no double quoted parts. |
\^"C:\TEST^" ^"A\\\^"
|
||||
Example 8.5a: "C:\TEST %&^ A\" |
Parameter |
||||
|---|---|---|---|---|---|
Start with the parameter you want |
"C:\TEST %&^ A\" |
||||
| 1. | Apply the Microsoft C/C++ parsing rules | ||||
| a. |
|
\"C:\TEST %&^ A\\\"
|
|||
| b. | enclose the whole parameter in double quotes | ┌───────────────────┐
|
|||
| 2. | Apply the Command Prompt parsing rules (cmd.exe) | ||||
| a. | determine what cmd.exe will see as the quoted parts | ┌─┐ ┌┐
|
|||
| b. | escape the special characters not in double quoted parts:
( the escape character for cmd.exe is ^ ) |
┌─┐ ┌┐
|
|||
| c. | if this will be placed in a batch file, double the % characters | ┌─┐ ┌┐
|
|||
Result: To get desired parameter use this: |
"\"C:\TEST ^%%^&^^ A\\\"" |
||||
Another way to get the same result would be at step 2a just escape all special characters including all double quotes so there are no double quoted parts. |
^"\^"C:\TEST %^&^^ A\\\^"^"
|
||||
| c. | and if this will be placed in a batch file, double the % characters | ^"\^"C:\TEST %%^&^^ A\\\^"^"
|
|||
Example 8.5b: "C:\TEST %&^ A\" |
Parameter |
||||
Start with the parameter you want (same as 5a) |
"C:\TEST %&^ A\" |
||||
| 1. | Apply the Microsoft C/C++ parsing rules | ||||
| a. |
|
\"C:\TEST %&^ A\\\"
|
|||
| b. | enclose spaces in double quotes
(A double quoted part can be anywhere within a parameter) |
┌─┐ ┌─┐
|
|||
| 2. | Apply the Command Prompt parsing rules (cmd.exe) | ||||
| a. | determine what cmd.exe will see as the quoted parts | ┌───────┐ ┌───┐ ┌────┐
|
|||
| b. | escape the special characters not in double quoted parts:
( the escape character for cmd.exe is ^ ) |
it's all in double quoted parts | |||
| c. | if this will be placed in a batch file, double the % characters | \"C:\TEST" "%%&^" "A\\\"
|
|||
Result: To get desired parameter use this: |
"\"C:\TEST ^%%^&^^ A\\\"" |
||||
Another way to get the same result would be at step 2a just escape all special characters including all double quotes so there are no double quoted parts. |
\^"C:\TEST^" ^"%^&^^^" ^"A\\\^"
|
||||
| c. | and if this will be placed in a batch file, double the % characters | \^"C:\TEST^" ^"%%^&^^^" ^"A\\\^"
|
|||
| Example 9.1: &<>^|()@! | Parameter | ||
|---|---|---|---|
Start with the parameter you want |
&<>^|()@! |
||
| 1. | Apply the Command Line to Batch File parsing rules | ||
| a. | determine what cmd.exe will see as the quoted parts: | it's all unquoted |
|
| b. | escape the special characters not in double quoted parts: | ^^^&^^^<^^^>^^^^^^^|()@!
|
|
Result: To get desired parameter use this: |
^^^&^^^<^^^>^^^^^^^|()@! |
||
Example 9.2: &<>^|()@! |
Parameter |
||
|---|---|---|---|
Start with the parameter you want |
┌─────────┐
|
||
| 1. | Apply the Command Line to Batch File parsing rules | ||
| a. | determine what cmd.exe will see as the quoted parts: | it's all in a double quoted part |
|
| b. | escape the special characters not in double quoted parts: | Nothing to escape because it's all in a double quoted part |
|
Result: To get desired parameter use this: |
"&<>^|()@!" |
||
Example 9.3: &<>^|()@!"&<>^|()@! |
Parameter |
||
|---|---|---|---|
Start with the parameter you want |
&<>^|()@!"&<>^|()@! |
||
| 1. | Apply the Command Line to Batch File parsing rules | ||
| a. | determine what cmd.exe will see as the quoted parts: | ┌─────────┐ ┌───
|
|
we have a problem in that the final " is interpreted by cmd.exe as opening a double quoted part. To avoid this, escape that last " |
┌─────────┐
|
||
| b. | escape the special characters not in double quoted parts: | ┌─────────┐
|
|
Result: To get desired parameter use this: |
"&<>^|()@!"^^^&^^^<^^^>^^^^^^^|()@!^^^" |
||
Though not necessary, it's OK to escape the rest of the characters: |
┌─────────┐
|
||
An easier way to get the same result would be to escape the " within the parameter so it doesn't end the double quoted part. Then nothing else needs to be escaped since it's all in a double quoted part. |
┌────────────────────┐
|
||
Another way to get the same result would be to escape all the special characters including all the " so nothing is in a double quoted part: |
|||
^^^"^^^&^^^<^^^>^^^^^^^|()@!^^^"^^^&^^^<^^^>^^^^^^^|()@!^^^" |
|||
As before, though it's not necessary, it is OK to escape the rest of the characters: |
|||
^^^"^^^&^^^<^^^>^^^^^^^|^^^(^^^)^^^@^^^!^^^"^^^&^^^<^^^>^^^^^^^|^^^(^^^)^^^@^^^!^^^"
|
|||
Example:
> C:\WINDOWS\system32\wscript.exe ShowParams.vbs hello goodbye Friday
When you run ShowParams.vbs you'll notice the window title says, "Window Script Host".
|
“If you want to get picky, the truth is that you can’t read
command-line arguments using VBScript; that’s because VBScript
doesn’t know anything about command-line arguments. But
that’s all right; after all, VBScript doesn’t have
to know anything about command-line arguments. That’s because
Windows Script Host takes care of all that stuff.
“Any time you supply a command-line argument to a script that runs under
Windows Script Host (that includes JScript scripts as well as VBScript
scripts) those arguments are automatically stored in the Wscript.Arguments
collection.”
|
![]() |
Algorithm:
Splitting the Command Line to get Parameters |
|---|
start with: ShowParams.exe hello goodbye Friday
|
loop parse off next parameter: skip over spaces, tabs clear " flag save starting address of this parameter LOOP process this character: If space or tab if " flag set accept this space or tab as part of the parameter else write a 0 here to terminate this parameter and goto parse off next parameter Else if " toggle " flag, strip " (shift rest of line left 1 char) move to next char ENDLOOP endloop
| 1. | Larry Osterman's WebLog The Windows command line is just a string...
Note even though the execl() API allows you to specify a command line string, the execl() API parses that command line string into argv and argc before calling execve(). |
| 2. | ibid. |
| 3. | or possibly CScript.exe; WScript.exe is the Windows version, CScript.exe is the console version. You'll find them in the System32 directory. |
| 4. | In some cases cmd.exe may call ShellExecute() which eventually calls CreateProcess(), passing it a command line. |
| 5. | On Windows 95,98,ME the Command Prompt Window program was COMMAND.COM .
The parsing rules are the same.
(Back then it was also known as the DOS Prompt, or MS-DOS Prompt. Technically COMMAND.COM
is DOS.
Note there are other Command Prompt Window programs such as JPSoft's "Take Command". ( Note the following CP/M legacy constructs: 1. Command line arguments can be separated by an unquoted semicolon or comma. This affects builtin commands like COPY and batch file parameters. In particular, I can think of no way to pass A;B (without quotes) as a paramater to a batch file. 2. If the command is called by name (no path), the following slash is treated a separator, as in DIR/P. This affects both builtin commands and external commands. Note: If you want to use NT-style slash-separated paths with DOS utilities you have to quote them (as in TYPE "C:/BOOT.INI"). |
| 6. | It's been documented in the past, such as here:
"Percent Signs Stripped from Batch File Text" and it's mentioned in current documentation here (last sentence of the "Copy Examples" section): "dtutil Utility" Note: JPSoft's Take Command command line utility processes % differently. You'll need to quadruple the % char ( |
| 7. | See footnote 6 |
| 8. | See footnote 6 |
| 9. | JScript is Microsoft's own version of JavaScript. |
| 10. | "Windows Script Host Basics" "Description of Windows Script Host (WSH)" "Hosting Environments and Script Engines" |
| 11. | See footnote 6 |
| 12. | |
| 13. | |
| 14. | |
| 15. | Technically, WinMain in WinMain.c calls Py_main in main.c passing it __argc and __wargv as argc[] and argv[] respectively. |
| 16. | Thanks to Christopher Yeleighton for these two points. |
| 17. | YoLinux.com: GNOME desktop basics → GNOME Desktop Launcher |
| 18. | The KDE Menu Editor Handbook |
| 19. | Thanks to András Korn for assistance in updating the *nix section (Feb. 2011). |