* Вот, например: при перенаправлении в файл можно указывать, которые из потоков (STDOUT, STDERR или оба) будут перенаправляться. В принципе, я уже знал об этом из какой-то статьи в KB, но рассчитываю, что для кого-нибудь эта возможность окается новой: ведь в обычном command.com её не было. (Хотя, кажется, это стандартная юниксовая фича.)
- Код: Выделить всё
C:\>dir foo >out &echo ---- &type out
Файл не найден
----
Том в устройстве C имеет метку MYCOMP'SHDD
Серийный номер тома: C4CC-1CD9
Содержимое папки C:\
C:\>dir foo 2>out &echo ---- &type out
Том в устройстве C имеет метку MYCOMP'SHDD
Серийный номер тома: C4CC-1CD9
Содержимое папки C:\
----
Файл не найден
C:\>dir foo >out 2>&1 &echo ---- &type out
----
Том в устройстве C имеет метку MYCOMP'SHDD
Серийный номер тома: C4CC-1CD9
Содержимое папки C:\
Файл не найден
C:\>
* Операторы перенаправления могут быть в любом месте командной строки:
- Код: Выделить всё
C:\>echo foo >out &type out
foo
C:\>echo >out foo &type out
foo
C:\>>out echo foo &type out
foo
C:\>
Про эту фичу я раньше не знал, но сегодня, пользуясь случаем, проверил: в sh(1) она тоже есть. Интересно, зачем она нужна? дань традиции?
* Третья любопытная фича -- именно дань традиции; она относится не конкретно к cmd.exe, а к Винде вообще, но именно в батниках она полезнее всего.
Специальные файлы (NUL, CON, PRN и т.д.) "существуют" в каждой папке. Поэтому по традиции папку проверяют на существование оператором exist dirname\nul:
- Код: Выделить всё
C:\>if exist windows\nul echo Windows found.
Windows found.
C:\>if not exist dos\nul echo DOS not found.
DOS not found.
C:\>
В принципе, в cmd.exe "\nul" можно и не писать, но в command.com это было обязательно.