Как известно, в расово-верной ОС Виндовс довольно затруднительно использовать командную строку с той же эффективностью, как это можно было бы сделать во всяких линуксах. Однако, существуют костыли, позволяющие эту ситуацию подпереть.
Мне, например, на работке довольно часто приходится писать всякие шел-скрипты или запускать что-нибудь хитрое через команд лайн. Набив руку на этой работе, делюсь унылыми трюками, позволяющими делать ее быстрее и эффективнее.
Чтобы выполнить что-нибудь (для примера, пинг гуглов), многие люди часто делают так: Start -> Run... -> cmd -> ping -t google.com. Это не оптимальный способ. Быстрее делать Win+R -> cmd /k ping -t google.com. А тем, у кого запущен синюшный фар или краденый тотал командир, еще проще - у них даже win+r нажимать не надо - бери и пиши команду сразу. Странно, но из знакомых мне пользователей Тотального Командира почти никто не использует его возможности запускать всякое через командную строку. Это печально. Командир (равно как и синий фар) ведь хранит историю команд (Ctrl+E), в отличие от цмд-окошка, которое по выполнению команды сразу или почти сразу закрывается юзером. Алсо, в обоих файловых диспетчера существует множество других полезных комбинаций клавиш (Ctrl+Enter, Ctrl+Shift+Enter, Shift+Enter, тысячи их), позволяющих формировать команду очень-очень быстро.
Еще один хинт - таки поставить что-нибудь вроде UnxUtils (некоторые маньяки ставят cygwin, однако часто это излишне). UnxUtils не требуют инсталляции вообще, не срут в реестр, немного весят и бесплатны. Я чаще всего юзаю grep (этой хренью чудесно всякие логи фильтровать), sed (конвертить всякое файлецо/логи в более читаемый вид, например), ls (почти как dir, только бодрее), cat (можно, конечно, писать copy file.txt con, но cat короче), wget (по-быстрому забрать архив или конский стометровы xmlс мегакорпоративного сайта, не ожидая, пока браузер будет тупить, не понимаю что с этим файлом делать - открывать или таки предложить сохранить) и еще какие-то другие. Не помню. Кстати, для линуксового tail -f есть чудесный аналог - tail for windows называется (ну или как-то похоже; можно невозбранно найти на
сорсфорже). Эта штука позволяет следить за каким-нибудь логом (или за несколькими сразу) практически в реальном времени. Вроде бы простая вещь, а в винде почему-то такой прилаги нет.
Ну если нужно посложнее что написать, можно поставить какой-нибудь ruby или perl. Я предпочитаю первый, потому что код на нем выглядит прекраснее. Часть автоматизации на моей работе сделана как раз на руби.
После того, как у вас появится куча всяких мелких командлайновых прожек (анты/нанты разные, svn, zip/unzip, unxutils и куча другого), переменная среды PATH превратится в Адъ. Кроме того, каждый раз лезть в какую-то засаду за этим пасом, чтобы добавить туда новую директорию, несколько уныло. Алсо, PATH умрет при следующей переустановке системы, и придется снова восстанавливать его прежний вид.
Я обхожу это так. Создаю где-нибудь папку, например, bin. Записываю в нее стопицот cmd-файлов с примерно следующим содержанием (на примере файла svn.cmd): @"c:\program files\svn\bin\svn.exe" %*. Добавляю эту папку в bin. Все! Теперь и PATH жив, и всякие анты/грепы можно вызывать, не указывая полного пути к ним.
Еще, чтобы, так сказать, раскрыть для себя мощь командной строки виндовс, очень рекомендую
Урок bat-аники на рсдне. Отличнейшая статья. Знаете ли вы, например, что в бат-файлах можно полноценные функции сделать?
Ну и еще несколько коротких советов.
Не делайте cd. Это не работает, когда текущая директория и целевая имеют разные буквы диска. Правда. Делайте cd /d.
Всегда делайте проверки правильности выполнения каждой команды в тех скриптах, где совершаются деструктивные действия (удаление файлов, копирование с молчаливым согласием на перезапись, перегенерация какого-либо файла и прочее). Даже cd нужно проверять. Потому что если, например, после cd %1 у идет что-нибудь вроде del *.cmd, то в случае кривого параметра, переданного скрипту, он удалит все цмд файлы рядом с собой. И себя заодно.
Не расчитывайте на то, что ваш скрипт будет вызван из той директории, где он лежит. То есть, если используете относительные пути в своем цмдшнике (но на самом деле они относительны того места, где этот цмд-файл лежит), потрудитесь или написать cd %~dp0 в начале, или pushd %~dp0 в начале и popd в конце, или добавить %~dp0\ в каждый относительный путь.
Если есть вероятность, что переменная может содержать пробелы, а ее значение используется как параметр какой-нибудь команды (или как команда), не забывайте кавычки. copy %1 %2 - неправильно. Правильно - copy "%1" "%2" или copy %~1 %~2.
Чтобы вывести на консоль текущее время, можно воспользоваться командами date /t и time /t. Однако они настолько унылы (во первых, невозможно вывести дату и время в одну строку, во-вторых, точность последней - минуты, что часто неприемлемо), что я использую другой способ. echo %date% %time%.
Для виндовых команд используйте /?. Можно много нового узнать, правда. Даже для тех вещей, которые, казалось бы, очевидны и прямолинейны. Запустите, например, set /? или dir /?. Ну линуксовое добро, понятное дело, озывается на что-нибудь вроде -h или --help.
Вот так, с помощью наивных детских костылей, распорок и напильника, виндовую командную строку можно сделать почти юзабельной. Удачи.