Командные файлы помогают сэкономить время

Я так давно работаю в качестве специалиста по ИТ, что уже рефлекторно использую инструменты командной строки при необходимости выполнения повторяющихся заданий. Часто, когда я вижу системного администратора, который бьется над сложным сценарием, мне бывает трудно удержаться от комментария: «Командный файл сделал бы все проще и быстрее!» Ловлю на себе удивленные взгляды, потому что многие администраторы еще слишком молоды, чтобы иметь навыки работы в DOS, да и не вполне представляют себе, что такое командный файл. Приходится объяснять, что командный файл является просто текстовым файлом, в котором перечислены команды DOS. Всякий раз после публикации статьи об использовании командных файлов для решения практических задач я получаю много писем с вопросами, где можно почерпнуть дополнительную информацию об использовании этих удобных и полезных утилит.

Подключение сетевых дисков

Администраторы чаще всего спрашивают о подключении сетевых дисков, чтобы пользователи имели доступ к нужным папкам на удаленных компьютерах. Они обычно добавляют, что, когда они пытались реализовать эту простую операцию с помощью сценариев, задача оказывалась намного труднее, чем они ожидали. Многие также интересуются, как выполнить сетевое подключение к папке, к которой нет совместного доступа. Ответ на оба вопроса один: «Пользуйтесь командной строкой».

Подключение сетевых ресурсов из командной строки выполняется с помощью команды Net Use. Наберите:

net use

без дополнительных параметров, и команда выдаст список подключенных дисков, из которого ясно, какие буквы дисков доступны. На экран выводится следующая информация.

  • Текущее состояние параметра Reconnect at Logon (восстановить подключение при регистрации), заданного текстом "New Connections Will Be Remembered - новые подключения будут сохранены в памяти" или "New Connections Will Not Be Remembered - новые подключения не будут сохранены в памяти".
  • Текущий статус каждого подключения указывается либо как OK (означает подключение), либо как Disconnected (отсоединен).
  • Буква локального диска.
  • Имя подключенного сетевого ресурса (папки) в формате UNC (Universal Naming Convention - универсальное соглашение об именовании).
  • Тип сети (обычно Microsoft Windows, но для клиента Novell NetWare при подключении к серверам NetWare будет указан тип сети NetWare).

Как правило, при загрузке компьютера все подключенные ресурсы помечаются как отключенные (Disconnected), но после первого обращения к диску статус меняется на Connected (подключен). Можно обратиться к сетевому диску в My Computer или набрать букву диска (с двоеточием!) в командной строке:

k:

Не забывайте указывать символ двоеточия после буквы диска.

Подключение сетевого диска

Для назначения буквы диска общей папке нужно ввести в командной строке:

net use d: 

Вместо d: следует указать букву диска по своему усмотрению. Если имя каталога содержит пробелы, весь путь, в том числе и две обратные косые черты перед именем сервера, необходимо заключить в двойные кавычки. Если все нормально, Windows выдает сообщение Command completed successfully. Правильность подключения можно проверить с помощью команды Net Use, которая покажет новый список сетевых ресурсов.

Будут восстанавливаться сетевые диски или нет, зависит от параметра Reconnect at Logon («Восстанавливать подключения»). Этот параметр восстановления можно явно задать или отключить с помощью ключа /persistent: [yes/no]. Например, для восстановления соединения при регистрации пользователя нужно ввести:

net use f:  /persistent:yes

а если требуется, чтобы диск был доступен только в текущем сеансе, следует использовать значение No в этой строке:

net use f:  /persistent:no

Выбранное значение для параметра восстановления соединения станет значением по умолчанию для параметра Reconnect at Logon, в том числе и для используемого в графическом интерфейсе в окне подключения сетевого диска Map Network Drive.

Подключение к папкам, к которым нет общего доступа

В отличие от графического интерфейса Windows, команда Net Use не ограничивается подключением только к общим папкам. Для подключения к подкаталогу, к которому нет общего доступа в общем каталоге, или к любой папке на общем диске можно ввести команду:

net use f:

 \

Эта возможность подключения к ресурсам, которые явно не предоставлены в общий доступ, может оказаться полезной в некоторых ситуациях. Например, можно обеспечить общий доступ ко всему диску, а пользователям настроить подключения к отдельным каталогам диска. Это сомнительный подход с точки зрения безопасности, так что при необходимости воспользоваться такой возможностью следует убедиться, что разрешения для конкретной папки, к которой не задан общий доступ, настроены правильно.

Удаление сетевого диска

Для удаления сетевого диска нужно ввести команду

net use : /delete

В этой команде вместо d следует ввести букву нужного диска. В ответ система выдаст сообщение об удалении ресурса:

d: was deleted successfully

Командные файлы для подключения дисков

Команда Net Use дает возможность применять командные файлы для создания общих ресурсов. Администраторы могут задействовать командные файлы с командой Net Use в процессе регистрации для назначения пользователям ресурсов. Назначение ресурсов облегчает пользователям доступ к соответствующим папкам программ и данных. Например, для пользователей, которые работают в корпоративной базе данных, можно было бы создать сценарий регистрации следующего содержания:

net use g: 
net use h: 

Нужно присвоить файлу любое имя (с расширением .bat) и скопировать его в каталог для сценариев регистрации на контроллере домена DC. Сценарии регистрации на DC находятся в каталоге %SystemRoot% SYSVOLsysvolscripts. Эта папка со сценариями автоматически предоставляется в общий доступ с именем NETLOGON (с этим именем она видна на удаленных компьютерах при просмотре DC в My Network Places).

Не следует пользоваться буквами дисков, которые назначаются домашним каталогам User Home Drives. При регистрации пользователя Windows сначала назначает буквы домашним каталогам, до запуска любого сценария из общей папки со сценариями. При попытке сценария регистрации использовать букву, которая уже занята, система сообщает об ошибке The local device name is already in use («имя локального устройства уже занято»).

Командные файлы для управления

Я пользуюсь командными файлами для задач общего управления и очистки. Например, в конце рабочего дня я удаляю все резервные копии документов Microsoft Word, с которыми работала. Возможность создавать копии в Word очень удобна, но при успешном сохранении текущей копии резервная копия не нужна, и имеет смысл очищать дисковое пространство от резервных копий. Для удаления лишних файлов можно воспользоваться следующей командой (папки с именами, в которых есть пробелы, необходимо заключать в кавычки).

del c:»documents and settings»
 kathy.ivenseast»my documents»*.wbk
/s/f/q

Ключ /s предписывает Windows удалять указанные файлы из всех подкаталогов. Ключ /f сообщает Windows о принудительном удалении файлов, помеченных только для чтения. Ключ /q (молчаливый режим) позволяет Windows не спрашивать подтверждения при использовании групповых символов в команде. Для копирования файлов бухгалтерской программы, почтовых ящиков Eudora и адресной книги Eudora в их собственные папки в My Documents можно воспользоваться командами:

Copy C:QuickBooks»company files»*.qbw
C:»Documents and Settings»
  kathy.ivenseast»my documents»
  QBBackup /y
Copy C:Quickenivens.* C:»Documents and
 Settings»kathy.ivenseast»my
 documents»QuickenBackup /y
Copy C:Eudoradata*.mbx C:»Documents
 and Settings»kathy.ivenseast»my
 documents»EudoraBackup /y Copy
C:Eudoradata
ndbase.txt
 C:»Documents and Settings»
  kathy.ivenseast»my documents»
  EudoraBackup /y

Ключ /y говорит Windows, что не надо спрашивать подтверждения при копировании поверх существующих файлов. Я применяю этот подход для удаления любого файла из любой папки в My Documents с учетом того, что для My Documents ежедневно делается резервная копия. Кстати, некоторые программы позволяют использовать папки с данными, которые находятся в другом каталоге, а не в том, где установлено программное обеспечение. В этом случае можно создать папку с данными в My Documents для облегчения резервного копирования.

Командные файлы для резервирования

Восстановление хотя бы одного файла из резервной копии занимает очень много времени. После третьего такого восстановления одного только файла я решила прекратить пользоваться специальным программным обеспечением для резервного копирования с компьютеров по сети. Мне требуется копировать только данные на пользовательских компьютерах, поэтому я создала систему командных файлов для копирования этих данных в сети.

Я запускаю копирование с целевого (получающего данные) компьютера, который извлекает данные для резервирования с нескольких узлов. Командный файл запускается автоматически из планировщика задач Scheduled Tasks. Некоторые компьютеры одновременно посылают свою копию на другой компьютер и получают резервную копию с другого компьютера (хороший принцип для одноранговых сетей.) Каждый получающий компьютер имеет папку под названием XXbackup (XX — имя копируемого компьютера). Получающие компьютеры, которые обслуживают несколько компьютеров, имеют дополнительные папки YYbackup, ZZbackup и т. д. Мой командный файл резервного копирования подключается к совместному ресурсу на посылающем компьютере, переносит файлы в папку My Documents, затем копирует My Documents на получающий компьютер. Я выбрала для подключения диска букву I.

Экран демонстрирует команды в созданном командном файле для копирования данных с двух моих компьютеров. Один компьютер, Admin, используется пользователем с именем Kathy, ее диск C является общим ресурсом admin-c. Он содержит файлы данных программ, хранящихся в папках, отличающихся от My Documents. На другом компьютере, Apps, работает пользователь по имени Sarah, ее диск C является совместным ресурсом apps-c. Компьютер, запускающий командный файл (т.е. получающий информацию компьютер) имеет отдельную папку для каждой копии. Поскольку я копирую только My Documents, командный файл сначала выполняет необходимую работу для переноса всего, что надо копировать, в папку My Documents.

Заметим, что, когда командный файл копирует My Documents, используется команда Xcopy, в которой есть более подходящие ключи, чем в команде Copy. Например, используя команду Xcopy, можно сразу же создать подкаталоги на получающем компьютере, поэтому при создании нового подкаталога в My Documents он копируется правильно (файл подсказки Windows содержит подробную информацию обо всех ключах команды).

Конечно же, можно использовать команды, рассмотренные выше, для создания командного файла на локальном компьютере, который будет переносить файлы, хранящиеся вне каталога My Documents, в папку My Documents. Потом надо сообщить пользователю, чтобы он запускал этот командный файл ежедневно в конце дня, чтобы гарантировать, что все данные подготовлены для автоматического копирования My Documents. Еще лучше, если командный файл запускается автоматически из планировщика задач вне обычного времени работы пользователя. (Можно, конечно, доверить выполнение копирования пользователям, но по некоторым соображениям этого лучше не делать.) Другой вариант заключается в том, чтобы написать командный файл для проведения резервного копирования файлов из их собственных папок, т. е. без необходимости переносить файлы в My Documents для их копирования.

Мощь командного файла

Как было сказано в начале этой статьи, командный файл представляет собой просто текстовый файл, в котором на каждой строке находится одна команда DOS. Можно существенно увеличить возможности командных файлов, используя преимущества групповых команд, которые добавляют дополнительные возможности для командных файлов. Эти команды имеют возможности анализа условий выполнения команд, например If, If not, GoTo, For, и позволяют использовать переменные (начинающиеся с символа %). Мы не будем здесь перечислять все эти инструменты, информацию о них можно получить в файлах подсказки по Windows.

Можно использовать командный файл для того, чтобы вызвать какое-нибудь приложение и запустить новые задания. Например, некоторые приложения автоматически сохраняют данные в папке приложения, поскольку пользователь именно оттуда запускает исполняемые файлы. Если приложение жестко не привязано к диску, то можно использовать командный файл, чтобы указать для пользователя папку по умолчанию для сохранения файлов. В командном файле указывается каталог, в котором надо сохранять пользовательские файлы, и потом вызывается нужное приложение. Этим каталогом может быть локальная папка (лучше использовать команду CD) или сетевая общая папка. Такой метод можно применять для автономных приложений (только не для централизованной базы данных), которые используют отдельные служащие. Например:

CD c:mydata
c:CustomerFilesOurApp.exe

Или можно сохранить данные в My Documents:

CD c:»Documents and
  Settings»\%UserName%»my
  documents»MyCustomerData
c:CustomerFilesOurApp.exe

Заметим, что если пользователь регистрируется в домене, переменная для имени пользователя имеет вид %username%.%userdomain% (обратите внимание, что между двумя переменными стоит точка).

Для сохранения данных на сервер, на котором проводится резервное копирование, используем:

net use z:ServerName
 CustomerFilesMyOwnFolder
z:
c:CustomerFilesOurApp.exe

Можно также задействовать командный файл для вызова приложения, а затем автоматически скопировать файлы с данными, как в приведенном здесь примере (который я рекомендовала многим домашним пользователям).

Когда пользователь выходит из прикладной программы, исполняется следующая строка в командном файле (вместо нужно подставить имя файла данных).

c:QUICKENWqw.exe
Copy c:quickenw.*
 C:»Documents and
 Settings»\%UserName%»my
 documents»QuickenBackup /y
Exit

Этот командный файл написан в предположении, что резервное копирование папки My Documents выполняется ежедневно.

Открытие командной строки из любой папки

Часто возникает необходимость открыть окно командной строки в нужном каталоге или подкаталоге. Например, требуется переименовать группу файлов в некоторой папке. В этом случае командная строка является единственным средством решения задачи (переименование через графический интерфейс в этом случае довольно утомительно). После открытия окна командной строки обычно приходится добираться до нужной папки. Это довольно долгое занятие. Проще открыть приглашение на ввод команды прямо в нужной папке через My Computer или Windows Explorer.

Чтобы добавить команду, которая откроет командное окно в контекстном меню, появляющемся при щелчке правой кнопки мыши на любой папке, надо отредактировать системный реестр. Откроем редактор реестра и выполним следующие шаги:

  1. Перейдем к разделу HKEY_CLASSES_ ROOTDirectoryshell.
  2. Создадим новый раздел и назовем его OpenNew.
  3. В разделе OpenNew откроем параметр Default в правой панели и присвоим ему значение Open a Command Window ("открыть командное окно"). Это значение реестра представляет фразу, которая появляется в контекстном меню, поэтому можно вставить собственную фразу.
  4. Создадим новый подраздел в новом разделе OpenNew и назовем его Command.
  5. Откроем параметр Default в Command и введем в качестве значения cmd.exe /k cd %1. Мы изменяем только значение пункта Default; в подразделе при этом не добавляется новых параметров.

После внесения изменений в реестр нужно выполнить экспорт раздела реестра HKEY_CLASSES_ROOT DirectoryshellOpenNew. Windows сохраняет этот файл с расширением .reg. Требуется скопировать файл .reg на все остальные компьютеры, с которыми вы работаете, и выполнить двойной щелчок для его запуска, чтобы добавить параметры в реестр каждого компьютера. После этого на любом компьютере можно открыть командное окно с любой папкой в качестве текущей.

Для того чтобы добавить эту команду к контекстному меню диска, нужно воспользоваться теми же командами, внеся в них два небольших изменения.

  • В качестве начальной точки следует взять раздел HKEY_CLASSES_ROOT Driveshell.
  • Значением параметра Default в разделе HKEY_CLASSES_ROOTDrive shellOpenNewCommand является "cmd.exe /k".

Программа Command Here из набора Windows PowerToys выполнит эти задания за пользователей, которым не захочется вносить изменения в реестр.

Настройка окна командной строки

Для настройки окна командной строки нужно щелкнуть правой кнопкой на строке заголовка и выбрать Defaults или Properties. Независимо от того, какой пункт выбран, появляется диалоговое окно свойств, которое показывает одинаковые закладки с одинаковыми параметрами. Однако результаты выбора будут различными.

Изменение настроек в окне Defaults (Console Windows Properties, как показано на экране 2) изменит и настройки по умолчанию для всех окон командной строки. Внесенные изменения в текущем окне не видны, но они будут заметны в окнах, которые вы впоследствии откроете. Изменение настроек в диалоговом окне Properties («C:WINDOWSSystem32cmd.exe») изменит настройки только для текущего окна, причем разница будет видна сразу. Однако после того, как вы измените настройки этого окна и щелкнете OK, можно будет оставить эти изменения для всех окон командной строки, которые открываются из того же каталога. Например, если используется ярлык (например, ярлык в меню Start или на рабочем столе), чтобы открыть окно командной строки и в диалоговое окно свойств «C: WINDOWSSystem32cmd.exe» внести изменения, эти изменения появятся в следующем окне, которое будет открыто по тому же ярлыку. Однако изменения для ярлыков трудно отследить, поэтому, если требуется внести постоянные изменения для окна командной строки, стоит выбрать команду Default.

Экран 2. Диалоговое окно Console Windows Properties

В диалоговом окне Console Windows Properties на экране 2 показано четыре закладки. Все параметры понятны, к тому же каждый из них имеет подсказку What's This?, которую можно вызвать, щелкнув на имени пункта правой кнопкой. Новые изменения появляются всегда, когда окно командной строки открывается из подменю Accessories. Если ранее был создан ярлык для командной строки на рабочем столе или в панели задач (у меня один находится на панели быстрого запуска Quick Launch), то новые настройки использоваться не будут. В этом случае надо исключить ярлык из панели и скопировать его снова из подменю Accessories.

После создания нужного вида командного окна его можно повторить на других компьютерах. Эти изменения были записаны в реестре, поэтому следует сделать экспорт раздела реестра HKEY_ CURRENT_USERConsole. Экспортируемый файл сохраняется с расширением .reg, и его нужно правильно назвать (например, mycommandwindow.reg). Скопируйте этот файл на другие компьютеры. При двойном щелчке по имени файла Windows запросит подтверждение для реализации этого изменения в реестре на другом компьютере.

Редактирование в окне командной строки

Можно скопировать (но не вырезать) текст из окна командной строки. Для этого при включенном режиме быстрого редактирования QuickEdit Mode (на вкладке Options любого только что рассмотренного диалогового окна Properties) следует выбрать мышью текст, а затем нажать Enter, чтобы поместить этот текст в буфер обмена Clipboard. Если режим быстрого редактирования (QuickEdit Mode) не включен, нужно щелкнуть правой кнопкой по строке заголовка, выбрать Edit из контекстного меню, потом выбрать Mark. Выберите текст мышью или поставьте курсор на начало нужного текста и удерживайте в нажатом положении клавишу Shift, пока выбираете текст. Затем следует нажать Enter, чтобы поместить выбранный текст в буфер обмена.

Чтобы вставить текст в командную строку, требуется поместить курсор в нужную позицию для вставки текста. Если включен режим быстрого редактирования, необходимо щелкнуть правой кнопкой, чтобы вставить этот текст. Если данный режим не включен, нужно выбрать команду Paste из контекстного меню. Если привычнее пользоваться клавиатурой, а не мышью, можно нажать Alt+Space, затем ввести буквы E и P, чтобы вставить текст.

Командные файлы полезны везде

Научившись пользоваться командной строкой и создавать командные файлы, можно распространить их среди остальных пользователей, чтобы всем было проще работать. В одноранговой сети командные файлы могут пригодиться для подключения к ресурсам или при выполнении заданий по сопровождению на других компьютерах. Для использования командных файлов с планировщиком заданий Task Scheduler имеет смысл снабдить их дополнительными комментариями.

Кэти Ивенс - Cтарший редактор Windows IT Pro. Автор около 50 книг и сотен журнальных статей на различные темы по компьютерам. Ее последняя книга Running QuickBooks в Nonprofits (CPA911 Publishing). kivens@windowsitpro.com