cmd.rst
author Oleksandr Gavenko <gavenkoa@gmail.com>
Thu, 10 Jun 2010 15:02:05 +0300
changeset 413 97bcb31af707
parent 410 46d2180b4dc5
child 735 5c437e2d5fe1
permissions -rw-r--r--
Updated installation instruction for cygwin.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
99
0fa8ff78a008 CMD tricks.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     1
-*- outline -*-
0fa8ff78a008 CMD tricks.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     2
355
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
     3
* Quoting.
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
     4
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
     5
 * Arguments are delimited by white space, which is either a space or a tab.
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
     6
 * A string surrounded by double quotation marks is interpreted as a single
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
     7
   argument.
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
     8
 * A double quotation mark preceded by a backslash, \", is interpreted as a
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
     9
   literal double quotation mark.
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
    10
 * Backslashes are interpreted literally, unless they immediately precede a
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
    11
   double quotation mark.
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
    12
 * If an even number of backslashes is followed by a double quotation mark,
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
    13
   then one backslash (\) is placed in the argv array for every pair of
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
    14
   backslashes (\\), and the double quotation mark (") is interpreted as a
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
    15
   string delimiter.
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
    16
 * If an odd number of backslashes is followed by a double quotation mark,
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
    17
   then one backslash (\) is placed in the argv array for every pair of
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
    18
   backslashes (\\) and the double quotation mark is interpreted as an escape
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
    19
   sequence by the remaining backslash, causing a literal double quotation
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
    20
   mark (") to be placed in argv.
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
    21
 * In double quote mark need surround such chars:
410
46d2180b4dc5 How quote percent char.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 356
diff changeset
    22
     & < > [ ] { } ^ = ; ! ' + , ` ~ %
356
9592e984ea6d About ^ char.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 355
diff changeset
    23
   Also all this char can be escaped by ^ char.
9592e984ea6d About ^ char.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 355
diff changeset
    24
 * Long line can be truncated by ^ char, in this case trailing white spaces
9592e984ea6d About ^ char.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 355
diff changeset
    25
   not allowed.
410
46d2180b4dc5 How quote percent char.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 356
diff changeset
    26
 * To quote percent sign % before alpha char in batch file double it
46d2180b4dc5 How quote percent char.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 356
diff changeset
    27
   occurrences or plase in quotes:
46d2180b4dc5 How quote percent char.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 356
diff changeset
    28
     prog '%'HOME'%' "%"HOME"%" %%HOME%
355
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
    29
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
    30
  http://msdn.microsoft.com/en-us/library/ms880421.aspx
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
    31
                Parsing C Command-Line Arguments
cbb3da2b12fb Quoting in cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 350
diff changeset
    32
215
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    33
* Variables.
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    34
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    35
Variable name start with letter and underscore, next chars can be letter,
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    36
number and underscore. Variable name is case insensitive.
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    37
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    38
** List of variables.
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    39
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    40
  cmd> set
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    41
...
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    42
VAR=VALUE
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    43
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    44
** Getting.
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    45
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    46
Write %VAR% in place where you want insert variable VAr value.
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    47
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    48
** Setting.
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    49
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    50
  cmd> set /p VAR=VALUE
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    51
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    52
VAR is variable name, VALUE is value.
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    53
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    54
** Deleting.
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    55
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    56
  cmd> set VAR=
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    57
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    58
VAR is variable name.
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    59
216
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 215
diff changeset
    60
** Input from user.
215
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    61
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    62
  cmd> set /p VAR=PROMPT
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    63
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    64
VAR is variable name, PROMPT is displayed prompt.
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    65
216
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 215
diff changeset
    66
** Input from file.
215
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    67
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    68
  cmd> set /p VAR=<FILE
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    69
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    70
VAR is variable name, FILE is file name. Sfter executing VAR contain first
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    71
line from FILE.
44ae18f7c0aa Variable for cmd.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 99
diff changeset
    72
99
0fa8ff78a008 CMD tricks.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    73
* CMD tricks.
0fa8ff78a008 CMD tricks.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    74
0fa8ff78a008 CMD tricks.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    75
  $ set /p TOOLOUTPUT= < temp.txt
0fa8ff78a008 CMD tricks.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    76
0fa8ff78a008 CMD tricks.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    77
  $ for /f "tokens=*" %%i in ('%~dp0sometool.exe') do set TOOLOUTPUT=%%i
0fa8ff78a008 CMD tricks.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    78
0fa8ff78a008 CMD tricks.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    79
  $ for /f "tokens=1 delims=" %%s in (users.txt) do (echo %%S & command "%%S") >> outputfile.txt
350
f7899ef26f6f CMD Limits.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 216
diff changeset
    80
f7899ef26f6f CMD Limits.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 216
diff changeset
    81
* Limits.
f7899ef26f6f CMD Limits.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 216
diff changeset
    82
f7899ef26f6f CMD Limits.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 216
diff changeset
    83
Variable value and one line command string after expansion can not exceed 8191
f7899ef26f6f CMD Limits.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 216
diff changeset
    84
characters for Windows XP and later and 2047 for Windows NT, Windows 2000.
f7899ef26f6f CMD Limits.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 216
diff changeset
    85
f7899ef26f6f CMD Limits.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 216
diff changeset
    86
  http://support.microsoft.com/default.aspx?scid=kb;en-us;830473
f7899ef26f6f CMD Limits.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 216
diff changeset
    87
                Command prompt (Cmd. exe) command-line string limitation