10 Рад зі створення сценаріїв

1. По можливості використовуйте змінні середовища
Використовуючи змінну в сценарії, ми робимо висновок ім'я змінної між знаками відсотка (%), а коли сценарій виконується, знаки відсотка і текст між ними замінюється значенням цієї змінної. Застосування змінних робить код сценарію більш універсальним, тому у нього більше шансів успішно працювати на різних комп'ютерах. Наприклад, в сценарії для командного процесора не варто жорстко прописувати інсталяційний каталог Windows. Замість цього слід використовувати змінну SystemRoot, яка завжди буде вказувати на конкретний інсталяційний каталог Windows. Так, команда
Echo% SystemRoot%

Як і у випадку з іншими змінними середовища, ці змінні полягають в знаки відсотка. Наприклад, наступний рядок сценарію буде відображати поточні час і дату:
Echo .ATE%% TIME%

Більшість замін мають синтаксис, відмінний від синтаксису команд, на місце яких вони пропонуються, тому доведеться відповідним чином змінити сценарії.

3. В оболонці Cmd.exe використовуйте розширення .cmd
Пакетним файлів Command.com необхідно розширення .bat. Оболонка Cmd.exe теж може використовувати розширення .bat, але в більш потужному мовою макропрограмування Cmd.exe багато команд несумісні з Command.com. Таким чином. bat файл, написаний для Cmd.exe, може давати збої, якщо користувач спробує виконати його в Command.com (наприклад, в Windows 98). Один із способів уникнути цієї проблеми полягає у використанні розширення .cmd для сценаріїв. Оскільки Command.com не розпізнає розширення .cmd, він просто не буде виконувати пакетний файл, якщо його ім'я закінчується на .cmd.

4. Переконайтеся в тому, що потрібні виконувані файли доступні
Якщо ваш сценарій задіє програми, які не є частиною стандартної установки операційної системи, необхідно подбати про те, щоб всі такі програми були доступні. Слід також задокументувати ці залежності в сценаріях. Я пропоную для забезпечення доступності виконуваних файлів поміщати їх в один каталог зі сценарієм. Тоді для їх запуску використовується синтаксис
«%

де exename - це ім'я виконуваного модуля, який потрібно запустити. синтаксис%

dp0 повертає диск, шлях і ім'я файлу поточного сценарію без лапок. Висновок всього рядка в лапки гарантує працездатність сценарію, навіть якщо ім'я файлу або каталогу, в якому знаходиться сценарій, містять лапки.

5. Правильно використовуйте подвійні лапки
Схоже, подвійні лапки ( «) є загальним джерелом плутанини для тих, хто пише сценарії. Подвійні лапки - це всього лише спосіб ідентифікувати містять прогалини аргументи командного рядка. Наприклад, правильна на перший погляд командний рядок
dir C: \ Program Files

насправді дає команді Dir два аргументи: C: \ Program і Files. Щоб втілити свій намір передати команді один аргумент C: \ Program Files (включаючи пробіл), ми повинні укласти його в подвійні лапки:
dir «C: \ Program Files»

Символи лапок не є частиною імені папки. Вони повідомляють команді Dir, що текст між ними є одним аргументом.

Сценарії для командного процесора також підтримують параметри командного рядка. Щоб скористатися параметрами командного рядка сценарію, потрібно задіяти запис% n (де n - число від 0 до 9). Ця запис називається заміняє параметром (або просто параметром). Наприклад, сценарій буде замінювати параметр% 1 першим аргументом командного рядка,% 2 - другим аргументом і т. Д. Крім параметрів від% 1 до% 9,% 0 замінюється ім'ям сценарію,% * замінюється цілої командним рядком сценарію (виключаючи ім'я сценарію) . Я згадую тут параметри командного рядка тому, що, коли Cmd.exe замінює параметри від% 1 до% 9 відповідними аргументами командного рядка, він залишає подвійні лапки, якщо вони є в аргументі. Напрошується очевидний висновок: параметр сценарію завжди буде укладено в лапки, якщо він містить прогалини. На цьому спостереженні засновано кілька простих правил, акуратно слідуючи яким можна практично повністю усунути проблеми лапок.
  • Не використовуйте лапки всередині параметрів сценарію (від% 1 до% 9), оскільки вони вже можуть містити лапки. Якщо необхідно задіяти параметр з командою If, використовуйте символи, відмінні від лапок (наприклад, фігурні дужки), щоб уникнути синтаксичну помилку. Наступний рядок буде працювати правильно, навіть якщо перший параметр (% 1) містить лапки:

    Виняток з цього правила становить випадок, коли ми використовуємо синтаксис%

    n, щоб видалити лапки параметра (див. наступне правило).
  • Ніколи не кладіть лапки всередину змінної середовища. Наявність прогалин в змінних середовища допускається, і лапки при цьому не потрібні. Якщо потрібно скопіювати параметр в змінну, використовуйте синтаксис%

    n (де n - число від 1 до 9), який повертає параметр без лапок. Наприклад, рядок
    Set DATAFILE =%

    1
    буде копіювати перший параметр сценарію (без лапок) в змінну DATAFILE. Виняток становить випадок, коли ви створюєте текст в лапках, який буде переданий в іншу команду.

  • Не забувайте, коли це необхідно, поміщати змінні середовища в лапки. Наприклад, розгляньте наступні рядки сценарію:
    Set TARGET =%

    Перша з цих рядків копіює другий аргумент сценарію в змінну TARGET, видаляючи лапки. Другий рядок синтаксично правильна, тому що параметр% 1 вже укладено в лапки, якщо він містить прогалини, а змінна TARGET повинна мати лапки, бо вона може містити пробіли.

    6. Застосовуйте команди Setlocal і Endlocal
    Команда Setlocal копіює всі змінні середовища, а команда Endlocal відновлює всі змінні зі значеннями, які вони мали перед запуском сценарію. Endlocal також видаляє будь-які змінні, створені сценарієм. Використання обох команд робить сценарій більш самостійним і гарантує, що сценарій «прибирає за собою сміття» шляхом відновлення змінних середовища в їх оригінальні значення і видалення змінних, створених сценарієм.

    Також можна використовувати команду Setlocal Enableextensions, щоб точно знати, що розширення команд включені. Розширення команд - це удосконалення для групи внутрішніх команд Cmd.exe (наприклад, If, For, Call), які надають додаткові можливості в порівнянні з командами Command.com, що мають такі ж імена. Розширення команд включені за замовчуванням, але в тих рідкісних випадках, коли вони відключені, команда Setlocal Enableextensions гарантує включення розширень команд. Щоб отримати більш детальну інформацію про розширення команд, слід ввести в командному рядку Cmd / ?.

    7. Використовуйте при необхідності символ Escape
    Cmd.exe використовує символ каретки (^) як ознака скасування спеціального значення зарезервованих символів командної оболонки. Наприклад, амперсанд () є роздільником команд - він дозволяє помістити кілька команд в одному рядку. Якщо ви маєте намір використовувати амперсанд в звичайному, літературному сенсі, то повинні «анулювати» його спеціальне значення, помістивши перед ним символ каретки ^. Так, в рядку
    Echo The ^ character is
    the command separator

    символ ^ змушує командний процесор скасувати звичайну інтерпретацію наступного за ним символу. Спеціальними символами є символи () <> ^ |. Немає необхідності використовувати ознака скасування, якщо ці символи зустрічаються всередині рядка, укладеної в лапки.

    8. Не використовуйте команду Exit без ключа / b
    Без ключа / b команда Exit закриває поточну командну оболонку. Якщо хтось запускає Cmd.exe і виконує сценарій, який містить команду Exit, поточна сесія командного процесора різко закриється. Команда Exit / b закриває поточний сценарій, не закриваючи поточну сесію командного процесора. Щоб більше дізнатися про команду Exit, наберіть у командному рядку Exit / ?.

    9. Використовуйте команду If Errorlevel з обережністю
    Команда If Errorlevel перевіряє код завершення останньої команди, виконання якої закінчено. Поведінка сценарію залежить від результату перевірки коду завершення програми. Розгляньте, наприклад, наступний сценарій:
    Myprogram
    If Errorlevel 1 Goto: ERROR

    Команда Goto в цих рядках буде виконана, тільки якщо Myprogram.exe повертає код завершення більше або дорівнює 1. Іншими словами, «If Errorlevel n» не означає «якщо останній код завершення програми в точності дорівнює n»; насправді ця умова означає «якщо останній код завершення програми не менше n». З огляду на таку поведінку, слід перевіряти код завершення програми в порядку убування (від найбільшого до найменшого). Щоб перевірити конкретне значення коду завершення програми, використовуйте динамічну змінну ERRORLEVEL замість команди If Errorlevel. Потрібно мати на увазі, що команда If Errorlevel відрізняється від змінної ERRORLEVEL, що стоїть в списку в табл. 1. Команда If Errorlevel назад сумісна з командою If Errorlevel з Command.com; змінна ERRORLEVEL доступна тільки в Cmd.exe.

    10. Враховуйте особливості команди Start
    Команда Start запускає програму або команду у вікні нової консолі. Однак, якщо спробувати запустити програму з папки, яка містить прогалини (або якщо ім'я програми містить прогалини), поведінка команди Start може не відповідати вашим очікуванням. Наприклад, наступна команда:
    Start «C: \ Program Files \ Microsoft
    Office \ Office11 \ Winword.exe »

    працює програмне забезпечення Microsoft Word всупереч очікуванню. Замість цього команда Start відкриє нову сесію Cmd.exe, заголовком вікна консолі якої буде укладена в лапки рядок. Така поведінка пояснюється тим, що команда Start використовує перший рядок в лапках в її командному рядку як заголовок вікна консолі.

    Щоб обійти цю дивину, використовуйте пару лапок для вказівки порожнього заголовка, потім вводите рядок програми, яку хочете запустити. Коректна програма Start виглядає приблизно так:
    Start «» «C: \ Program Files \ Microsoft
    Office \ Office11 \ Winword.exe »

    Всього не передбачиш



    Сценарії командного процесора Cmd.exe застосовуються досить широко. Освоївши наведені в цій статті рекомендації, ви зможете створювати більш надійні сценарії і уникати поширених проблем.

    Схожі статті