суббота, 28 апреля 2012 г.

BAT: Неизвестные факты из жизни пакетных файлов

Многие слышали про bat-файлы. Но не все знают что:

  1. Помимо BAT, были ещё CMD, WSH (Windows Script Host с поддержкой аж двух языков - JScript и VBScript), а чуть позже появился Power Shell. JScript и VBScript интересны тем, что были намного сложнее и непонятнее BAT. Но и на них писали.
  2. BAT работали ещё в DOS-е, поэтому его выполняет command.com. А вот CMD - это более новый формат, его выполняет cmd.exe. Поэтому лучше использовать расширение CMD.
  3. BAT и CMD не понимают вложенный if (то есть if может быть только на 1 уровне). Поэтому чтобы сделать условия, приходится рисовать блок-схему и расставлять везде GO TO. Да-да, ту самую блок-схему, которую ещё во времена "Мифического человеко-месяца" рисовали уже после завершения проекта.
  4. @echo off нужно, чтобы bat-ник не писал вызовы на экран.
  5. rem - это строка комментария.
  6. Если написать в файле script1.bat строку script2 (причём script2.bat существует - т.е. мы вызываем его как команду), то script2.bat запустится, а script1.bat - прекратит выполнение. Чтобы не прекращал, надо писать EXEC script2.
  7. Переход в директорию, где лежит скрипт - cd %~dp0.
  8. Можно поставить cygwin и наслаждаться *nix-овой командной строкой под Windows. Кстати, там можно вкладывать сколько угодно If-ов. А ещё можно поставить ActivePerl. К сожалению, писать скрипт прямо в командной строке у Perl под Windows не получится - не такой стандарт для кавычек.
  9. Параметры командной строки лежат в переменных  %1..%9. %0 - имя скрипта (без расширения). %10 и больше - нет.
  10. Включать-выключать сервисы из пакетных файлов - это просто:  Проверить:
    SC QUERY "XService" | find "RUNNING"
    IF not "%ERRORLEVEL%" == "0" GOTO StartService
    ................
    :StartService
    
     Запустить:
    NET START "XService"
    
     Остановить:
    NET STOP "XService"
    
  11. Откомпилировать и запустить пример для wxWidget:
    • Cоздаём в каталоге, прописанном в AUTOEXEC, вот такой makesample.cmd
      @echo off
      make -f makefile.bcc
      for %%f in (*.exe) do start %%f
      exit
      
    • Заходим в каталог с файлами
    • Запускаем (нужно, чтобы был установлен компилятор make)

Комментариев нет:

Отправить комментарий