Разработать пакетный файл для очистки подкаталога с подтверждением
На первый взгляд может показаться, что данные возможности системы абсолютно бесполезны для рядового пользователя, однако это не совсем так. При помощи пакетных файлов можно существенно упростить рутинную работу с ПК, сделать её удобнее, воспользоваться некоторыми скрытыми возможностями.
Новатором и пионером в данной области я, само собой, не являюсь, просто постараюсь изложить здесь базовое представление об этом типе файлов, рассмотреть некоторые примеры и остановиться на парочке деталей и тонкостей, касающихся так называемых батников .
Для удобства написания и, естественно, восприятия разобью статью по разделам. Но сначала:
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Некоторые манипуляции с пакетными файлами могут нанести вред системе (порой даже непоправимый), поэтому предупреждаю сразу, ни автор статьи, ни администрация сайта не несут абсолютно никакой ответственности за последствия, которые может повлечь за собой выполнение действий, представленных в этой статье. Все материалы представлены здесь исключительно с образовательной целью, и для ознакомления. Надеюсь на ваше понимание и прямоту ваших рук.
Часть первая. Основные моменты при создании bat-файлов
- Выше уже упоминалось, что пакетный файлы - это обычные текстовые документы. Так и есть, но для того, чтобы они работали и выполняли свои функции, им нужно придать подобающий вид, т.е. поменять расширение. Вообще в Windows используется как расширение *.bat, так и *.cmd, по сути они отличаются весьма незначительно лишь некоторыми нюансами, поэтому, в целях избежания путаницы, будем говорить о bat-файлах. Т.е. чтобы создать исполняемый пакетный файл, мы открываем стандартный блокнот (либо другой, привычный вам текстовый редактор), вбиваем туда нужные нам команды и сохраняем файл с любым именем и расширением bat;
- По сути, перечень команд, описанных в пакетном файле (батнике) может быть воспроизведён вручную в командной строке (пуск - все программы - стандартные - командная строка), упаковываем их (команды) мы исключительно для удобства, простоты и моментальности (если позволите) воспроизведения;
- Если испытываете что-то серьёзное и не уверенны в своих действиях, лучше испытывайте детище к примеру на виртуальной машине (в крайнем случае - на компьютере соседа);
- Список возможных к использованию команд очень велик, посмотреть его можно, набрав в командной строке help, здесь же будут расшифровываться команды по мере их появления в создаваемых батниках;
- Все инструкции, приведённые в статье, тестировались на ОС Windows XP и Windows 7.
Часть вторая. Синтаксис при написании bat-файлов
- Каждая команда вводится с новой строчки;
- Все команды выполняются последовательно за исключением тех случаев, когда внутри самого батника присутствует переход к определённой его части;
- Комментарии в пакетный файл могут быть добавлены двумя способами:
- либо после двух двоеточий ::переход к части копирования - либо при помощи команды goto, т.е. вводится команда goto, потом место для перехода, а между ними сам комментарий
- Если команду необходимо ввести с атрибутом, то сначала вводим команду, затем пробел, слэш и, собственно, сам ключ copy /Y Чтобы посмотреть список возможных атрибутов к конкретной команде, нужно в командной строке ввести команду, затем пробел, слэш и знак вопроса dir /?
- Для скрытия окна терминала выполняемой команды можно в начале строки поставить знак собачки @, если же требуется скрыть отображение выполнения всех команд, то проще (чтобы не ставить собачку в каждой строчке) в начале батника указать @echo off здесь команда echo off скрывает окна, а собачка впереди неё запрещает отображение выполнения самой echo off
- Все директории внутри команд, для исключения возможных ошибок, будем вводить в кавычках;
- По умолчанию при работе с кириллическим текстом на выходе вы можете получить иероглифы, при работе с папками/файлами, имеющими русские имена, вообще может ничего не получиться, это происходит из-за используемых кодировок, поэтому для исключения подобных неприятностей в начале пакетного файла будем указывать кодировку, корректно работающую с кириллицей следующей командой chcp 1251
- Есть команды (например, удаление файлов, форматирование), которые могут потребовать подтверждения действий. Порой это бывает очень нежелательно, в таком случае, можно вписать ответ заранее в сам пакетный файл. Ответ записывается ДО! команды и отделяется от неё вертикальной чертой |Y|del
- В командной строке (а значит и в пакетных файлах) при указании директории иногда бывает удобнее пользоваться переменными, нежели прописывать весь путь cd %APPDATA%
Приступим.
Часть третья. Резервное копирование при помощи батников
Резервное копирование данных - полезное и оттого весьма распространенное явление. Существует большое количество программ, отличающихся друг от друга функционалом, условиями распространения, уровнем (глубиной вопроса) и т.д. Бесспорно, пользоваться хорошей и красивой программой удобно и приятно, но если ваши задачи не слишком сложны, то элементарное создание бэкапов можно организовать и без использования стороннего софта, исключительно средствами ОСи.
Автоматическое копирование каталогов в папку backup
Для копирования каких-либо данных используется команда copy (копирование файла/файлов) или xcopy (копирование каталогов). Т.е., допустим, нам необходимо делать бэкап содержимого папки, в которой находятся ваши данные к дипломной работе (материалы, приложения, черновик самой работы и т.д.).
В этом случае текст будет следующим
Где D:\diplom\ - папка расположения всех материалов к диплому, а E:\backup\diplom\ - конечная директория резервной копии.
Создаём батник, кидаем его в автозагрузку (пуск - все программы - автозагрузка), и при каждом включении компьютера будет создаваться резервная копия (рк).Чуть усложним. Сделаем, чтобы при включении ПК старые данные сохранялись в папочке diplom_old, а новые в папочке diplom. Тогда батник будет иметь вид
del удаляет ранее созданную вторую рк.
rmdir переименовывает первую рк во вторую.
xcopy создаёт новую рк.
Атрибут /s применяет команду ко всем подкаталогам, атрибут /q отключает запрос на подтверждение действий.Если в двух копиях смысла нет, можно сделать так, чтобы заменялись только те файлы, которые были изменены, те же, которые не изменились, либо вообще были удалены из исходной папки, затронуты не будут. Для этого пишем следующее
Создание бэкапа в архиве
Ну и последнее, что здесь стОит рассмотреть, наверное, на данном этапе - это бэкапы в архиве
Рассмотрим изменённую предыдущую ситуацию. Допустим, нам надо, чтобы при каждом включении ПК создавалась копия папки, запакованная в архив.
Нам необходимо в автозагрузку положить батник со следующим содержимым
Архив папки D:\diplom будет создаваться в E:\backup, именем будет дата и время создания архива, т.е., например 16-Aug-12–14-06-53
Часть четвертая. Автоматизация процесса создания и удаления файлов/каталогов с использованием bat-файлов
Как создать папку из батника
Начнём с самого простого. Создание папки. Папка создаётся командой MD
Чтобы создать папку с именем backup в корне диска D:\, нам необходимо собрать следующего вида пакетный файл
Если же, допустим, нужна каждый день новая папочка с датой на месте имени, то батник будет иметь вид
Здесь строчкой set datetemp=%date:
-10% мы создаём переменную datatemp на время работы батника и присваиваем ей 10 символов значения системной даты;
Как создать текстовый файл из батника
С созданием пустых текстовых файлов дело чуть сложнее. Такой команды просто нет, нужно что-то в этот файл писать. Чтобы выйти из ситуации воспользуемся значением nul (это даже не нулевое значение, а его отсутствие)
Также, как и в примере с папкой, можно сделать именем текущую дату
Автоматическая очистка папки из батника
Теперь, что касается удаления. Тоже достаточно часто используемая область работы для батников. Так, например, без помощи спец.программ можно при каждом запуске (опять же, поместив пакетный файл в автозагрузку) очищать temp на вашей машине. Содержимое будет следующим
Строчкой cd "C:\Windows\Temp\" мы переходим в папку temp
Строкой echo Y|del *.* удаляем содержимое этой папки (не саму папку!)
Часть пятая. Прочие возможности bat-файлов
Возможностей, на самом деле, огромное множество. Здесь для примера рассмотрим некоторые из них.
Одна из самых известных возможностей использования батников - это запись содержимого каталога в файл
После выполнения этого файла, в папке, откуда он запускался, будет создан файлик file.txt , содержащий перечень всех файлов и папок в этом каталоге с указанием размера и даты последнего изменения. Можно преобразовать этот файл до вида
/S заставит батник показать содержимое не только каталога, но и всех подкаталогов.
c:\ поможет отобразить содержимое не того каталога, откуда запускается бат-файл, а нужного нам.
X:\file.txt сохранит конечный файл со списком содержимого в указанное нами место;
Запуск файлов из командной строки
Очень часто полезным оказывается возможность запуска объектов из командной строки (в данном случае уже из бат-файлов). Причем как программ, так и других видов файлов (графических изображений, медиафайлов, текстовых документов и т.п.)
К примеру, если в автозагрузку добавить текстовый документ, то при включении ПК после загрузки системы вы его сразу увидите. Либо откроется плеер и будет проигрывать соответствующий трек. (Подробнее про способы добавления файлов в автозагрузку вы можете прочитать в статье: Автозагрузка. Добавление приложений в автозагрузку Windows)
Для того, чтобы это реализовать, нужно просто в теле бат-файла прописать точный путь до необходимого объекта. Например
Для системных же программ нужно указать лишь её обозначение.
При выполнении этого батника откроется калькулятор. В данном случае строчку chcp 1251 можно опустить (как и в некоторых ситуациях из примеров выше), однако если уж стандартизировать все наши пакетный файлы, то её можно и оставить, вреда не будет.
Часть шестая. Хитрости или шутки в сторону
Здесь рассмотрим ещё несколько интересных возможностей для применения батников. Из названия ясно, что некоторые из действий могут навредить системе (хотя это можно сделать и "голыми руками"), но если делать всё с умом, то может выйти достаточно интересно.
Шпионские штучки. Похищаем содержимое флешки
В самом начале статьи было указанно, что команды в батниках выполняются последовательно, если это не оговорено в самом теле исполнительного файла. Рассмотрим именно этот частный случай. Нуууу, допустим. Вы знаете, что к вам придёт знакомый (а может, знакомая) с просьбой произвести какие-то манипуляции с его/её флэш-карточкой, и вам очень хотелось бы слить все данные с этого накопителя на ваш ПК. Но делать это при госте не совсем удобно, да и просто можно получить "красную карточку". Что мы в таком случае делаем? Создаём батник следующего содержания
Создаём на этот бат-файл ярлычок, в свойствах ярлыка указываем, чтобы файл запускался в свёрнутом состоянии. Дважды кликаем по ярлыку. Что имеем.
:test обозначает начало действия батника
if exist g:\ goto go проверяет наличие в компьютере диска G:\, если он есть, то переходим к части :go (суть в том, что обычно вставленная флешка получает для обозначения первую свободную в системе букву латинского алфавита, проследить это на своём компе не так уж сложно. Вот именно эту буковку мы и указываем вместо G:\)
goto test если диск G:\ не был найден, возвращаемся к началу части :test
:go обозначает начало действия второй части батника
xcopy "G:\*.*" "C:\упс\*.*" копирует всё содержимое диска G:\ в папку упс на диске C:\
Т.е. после того, как мы запустили файл с ярлыка, он запускается в свёрнутом состоянии и циклически проверяет наличие флешки в ПК. Как только флешка там засветится, начнётся копирование всех данных с неё в указанную папку, причем привычного окна копирования файлов не выскочит, всё будет отображаться в свёрнутом окне терминала.Ну, всё что было описанно выше, полезно на своём компе, однако есть несколько плюшек, с помощью которых можно подшутить над другом/подругой.
Маленький вирус в автозагрузку
Первая строка добавляет файл в автозагрузку для всех пользователей на Windows XP (для конкретного пользователя в качестве пути указываем %USERPROFILE%\"Главное меню"\Программы\Автозагрузка\)
Вторая строка добавляет файл в автозагрузку для Windows 7.
Начало обеих строк в виде copy %0 означает копирование "самого себя".
Это сделали. Ещё нам хотелось бы, чтобы после запуска батника и при каждой загрузке ПК появлялась весёленькая надпись, к примеру, "ТЫ ЛАМЕР!"
Для этого добавляем следующее
Эта часть основанна на скриптах. Подробно расписывать не буду, кому интересно, найдёт материал в сети. Скажу лишь, что для некоторых ОС вид этого блока может слегка отличаться. Так, например, в семёрке (Win7) скрипт может выглядеть следующим образом
Однако, и первый вариант будет работать.
Также окошко с текстом можно добавить в обход скриптов, оно будет, так сказать, стилизованное, виндовое от текущего пользователя с указанием текущей даты и времени
Едем дальше, ближе к вкусностям.
Чтобы наш объект экспериментов растерялся ещё больше, в тело батника по желанию добавляем что-нибудь из следующего:
%SystemRoot%/system32/rundll32 user32, SwapMouseButton >nul - строка меняет кнопки мыши местами. Весьма забавная штуковина, однако если человечек не отличается уровновешенной психикой, от этого советую отказаться. Чтобы поменять кнопки мыши обратно, заходи в панели управления в пункт мышь и там инвертируем галочку в поле обменять назначение кнопок.
Команда rundll32 keyboard, disable отключит клавиатуру вплоть до следующей перезагрузки, а rundll32 mouse, disable то же самое проделает с мышью. Если батник в автозагрузке, то при рестарте это дело, разумеется, повторится.
rundll32 shell32, SHExitWindowsEx 1 - выключит ПК.
rundll32 shell32, SHExitWindowsEx 2 - перезагрузит ПК.
Ну и del "%SystemRoot%Cursors*.*" >nul удалит курсоры мыши ( пользоваться с осторожностью и в самых крайних случаях! )
Теперь остаётся только скомпоновать желаемые строки в единый код
Часть седьмая. Упаковка исполнительного файла
Программный способ упаковки батников
- конвертировать bat-файл в *.exe при помощи какой-нибудь утилитки (например, bat to exe)
- создать sfx-архив.
Упаковка батников в SFX-архив
Второй вариант в рамках данной статьи чуток подробнее и рассмотрим.
- Для начала нам надо установить на ПК подходящий архиватор (для этих целей я рекомендую WinRAR, т.к. создание sfx-архивов в нём реализовано наиболее удобно и просто).
- Создаём нужный нам пакетный файл (батник).
- Кликаем правой кнопочкой по батнику, выбираем из контекстного меню WinRAR => Добавить в архив (дальше по вкладкам)
- Общие. Имя любое. Формат - RAR. Метод сжатия обычный. В параметрах архивации ставим галочку напротив Создать SFX-архив.
- Дополнительно. Жмём на кнопочку Параметры SFX. Вкладочка "Общие", выполнить после распаковки - вписываем имя архивируемого батника с расширением. Во вкладке "Режимы" в разделе "Режим вывода информации" ставим галочку напротив "Скрыть всё". На вкладочке "Текст и графика" можно, например, добавить симпатичную иконку вашему архиву вместо стандартной. Если вы не художник, то иконку можно вытащить из любой программы/игры при помощи стороннего софта, например Restorator.
- На этом всё. Остальные опции на ваше усмотрение. Жмём кнопочку ОК. В исходной папке с батником появится ещё и наш новый sfx-архив.
- Чтобы добавить солидность файлу, позволить ему прибавить в весе, можно в архив "напихать" ещё что-нибудь, это может быть что угодно, т.к. цель - только увеличение размера.
- В архиве может быть сколько угодно батников, при создании архива мы указываем, что выполнять нужно первый (прописываем его имя с расширением), чтобы после этого выполнился следующий, в конце (либо в нужном нам месте) пишемТ.е. когда дело дойдёт до этой команды, система переключится на исполнение файла с названием sled.bat, а затем вернётся к исходному.
Если же надо, чтобы работа первого батника не прерывалась, то используем другую командуВместо заключения
Стоит отметить, что кроме вышеперечисленных функций при помощи батников можно также редактировать и системный реестр, об этом наша отдельная публикация: Редактирование реестра Windows из командной строки, bat-файлы. Остаётся только напомнить, что вообще команд огромное количество, а вариантов их сочетаний и вовсе - бесконечное множество. Любую команду можно сначала проверить в командной строке, а только потом добавлять в тело пакетного файла.
Цель: закрепить навыки работы с командной строкой; изучить структуру командного файла, команды, используемые в командных файлах; получить практический навык создания командных файлов.
Теоретические сведения
- Пакетные командные файлы (ПКФ) в системе MS-DOS
Пакетные командные файлы используются в операционных системах (ОС) для того, чтобы иметь возможность задавать последовательность команд ОС, управлять запуском задач, создавать разные варианты рабочей среды.
ПКФ в системе MS-DOS являются текстовыми файлами в коде ASCII, которые содержат последовательности команд ОС. Они должны иметь расширение .ВАТ и иметь имя не более восьми символов. При этом, в текущем каталоге не должно быть одноименных файлов с расширением .СОМ или .ЕХЕ.
В ОС MS-DOS специально для ПКФ предусмотрено восемь команд и специальный символ @ (Табл.1).
Данные команды являются внутренними командами ОС, размещаются в командном процессоре и доступны из любого каталога.
Команда Назначение @ Не выводит на экран дисплея строку которая следует за ним. CALL Осуществляет выполнение одного пакета команд внутри другого пакета. CLS Очистка экрана. ECHO OFF Запрещает вывод на экран командных строк. ECHO ON Разрешает вывод на экран командных строк. ECHO <текст> Вывод на экран текстовой информации (при действии команды ECHO OFF). FOR Задание цикла. GOTO<метка> Передача управления на указанную метку. IF Условное выполнение команды. PAUSE Прерывает выполнение программы. REM Выводит текст на экран дисплея. SHIFT Сдвиг влево параметров команды. Terminate batch job (Y/N)?
(Завершить работу командного файла (Да/Нет)?
ПКФ можно сформировать с помощью любого текстового редактора или других программ позволяющих создавать файлы в коде ASCII.
Рассмотрим более подробно некоторые команды в ПКФ.
@– если этот символ поставлен в начало строки, то следующая за ним команда не выводится при включенном режиме вывода команды перед её выполнением (т.е. если ECHO ON).
После имени этой команды сообщается метка командной строки, в которую производится переход. Если перед строкой указано двоеточие, то это означает, что за ним следует метка, а не команда. Между двоеточием и именем пробел не ставится, между именем и командой GOTO оставляют пробел. Длина метки ограничивается 8 символами.
GOTO EXIT оператор безусловного
……………. перехода по метке
/Т:символ,число секунд – если этот параметр указан, то в случае, когда пользователь по истечении заданного времени не нажал ни на одну клавишу, принимается ответ символ.
Например: CHOICE /C:YN “Запустить программу ALFA? ”– при ответе N значение переменной ERRORLEVEL устанавливается равным 2, а при ответе Y– равным 1.
IF <условие> <действие> – оператор условия.
Например:IF ERRORLEVEL 1 GOTO EXIT.
Переменная <условие> может иметь один из четырех форматов:
Условие выполняется, если <набор_символов_1> и <набор_символов_2> являются идентичными после замещения параметров.
2. ERRORLEVEL <номер>.
Условие выполняется, если для последней команды, которую выполнила ОС код завершения равен или больше значения <номер>.
3. EXIST <имя_файла>.
Условие выполняется, если существует файл с указанным именем.
Условие выполняется, если не выполняется заданное условие.
COMMAND /Y /C имя_командного_файла [параметры]– выполнение командного файла в пошаговом режиме. Текст каждой команды будет выводиться перед выполнением на экран. Для выполнения команды надо нажать клавишу Y или Enter.
И после нажатия клавиши дальше выполняется командный файл. В период паузы возможен выход из выполнения командного файла путём нажатия сочетания клавиш Ctrl+C или Ctrl+Break.
Формат команды прост: SHIFT. В ПКФ можно использовать до десятка параметров, с помощью данной команды это количество можно увеличить. Команда SHIFT присваивает новые значения параметрам %0 - %9. При этом параметру %0 присваивается старое значение %1 ,%1 - старое значение %2 и т.д. %9 присваивается значение, следующее за старым значением %9 в командной строке.
FOR %%N IN(группа) DO команда %%N,
где N - однобуквенная переменная, последовательно принимающая значения, входящие в параметр (группа);
(группа) - имя файла или имена файлов, вместе с именем файла могут указываться дисковод и возможный путь доступа; команда - команда ОС MS-DOS.
CALL [<дисковод:>][<путь_доступа>]<командный_файл> <параметры>,
где <дисковод:> - дисковод диск которого содержит командный файл;
<путь_доступа> - путь доступа к данному ПКФ;
<командный файл> - имя ПКФ без расширения.
Задание на лабораторную работу
Для выполнения поставленной задачи можно перебрать в цикле все файлы с расширением txt, проверяя перед копированием имя каждого из этих файлов:
REM Проверка наличия параметра командной строки
IF -%!==- GOTO NoDir
RЕМ Копирование нужных файлов
FOR %%f IN (*.txt) DO IF NOT -%%f==-%2 COPY %%f %1
GOTO End
ECHO He указан каталог для копирования!
PAUSE
3. Задание аналогично второму упражнению. Дополнительные требования:
а) переписывать только те файлы, которые новее одноименных в каталоге - приемнике,
б) не прерывать копирование в случае возникновения ошибки,
в) записывать в файл logcopy.txt имя каждого копируемого файла и результат выполнения операции для него.
Другими словами, файл logcopy.txt должен быть примерно таким:
Успешно: а.txt
Ошибка : b.txt
Успешно: с.txt
В этом упражнении нужно создать два пакетных файла. В основном файле работает такой же цикл for, как и в предыдущем упражнении, однако вместо непосредственного выполнения команды copy здесь вызывается командный файл 3_1. bat:
REM Проверка наличия параметра командной строки
IF -%1==- GOTO NoDir
REM Вызов в цикле файла 3_l.bat для копирования нужного файла
FOR %%f IN (*.txt) DO IF NOT -%%f=-%2 CALL 3_l.bat %%f %1
GOTO End
ECHO He указан каталог для копирования!
PAUSE
Вызываемый в цикле файл 3_1.bat имеет следующее содержимое:
REM Копирование файла
XCOPY %1 %2 /D /С > NUL
REM Проверка успешности копирования
IF ERRORLEVEL 0 GOTO Success
REM Запись в файл отчета информации об ошибке при копировании
ECHO Ошибка: % 1 >> logcopy.log
GOTO End
REM Запись в файл отчета информации об успешном копировании
ECHO Успешно: %1 >> logcopy.log
4. Создать командный файл, который выводил бы содержимое каталога, указанного в качестве параметра командной строки, причем пользователю должна быть предоставлена возможность выбора с помощью меню устройства для вывода: на экран (информация выводится по одному
экрану), в текстовый файл c:\catalog.txt или на принтер.Следующий простой пакетный файл не требует дополнительных пояснений:
CLS
IF -%1==- GOTO NoDir
RЕМ Вывод меню на экран
ECHO A - На экран
ECHO Б - В файл C:\catalog.txt
ECHO В - На принтер
КЕМ Вывод подсказки для ввода
CHOICE /С:AБВ Куда выводить содержимое %1
CLS
КЕМ Определение сделанного выбора
IF ERRORLEVEL 3 GOTO DirToPrn
IF ERRORLEVEL 2 GOTO DirToFile
IF ERRORLEVEL 1 GOTO DirToCon
ECHO Выбор не был сделан.
GOTO End
DIR %1 | MORE
GOTO End
DIR %1 > C:\catalog.txt
GOTO End
GOTO End
ECHO He указан каталог для сканирования!
PAUSE
Задания
№ Задание Разработать пакетный файл для обновления архива. Выбор архиватора осуществляется из меню. Имя архива передается в командной строке. Разработать пакетный файл для очистки подкаталога с подтверждением. Разработать пакетный файл для проверки дисков (каталогов) на вирусы. Диск выбирается из меню. Имя антивирусной программы - в командной строке (drwebw.exe). Разработать пакетный файл для выбора из меню на запуск одного из нескольких редакторов (notepad, ncedit и др.) для редактирования требуемого файла. Имя файла передается в командной строке. Разработать пакетный файл для архивации файлов в каталогах и подкаталогах (по отдельности в каждом каталоге) и удаления архивных файлов. Имена каталога и архиватора - в командной строке. Разработать пакетный файл для построения системы студенческих каталогов с запросом на создание каталогов требуемых курсов, групп и запросом максимального числа пользователей в группе. Номера курсов и шифры групп - в командной строке. Разработать пакетный файл для перехода студента в личный каталог. Группа выбирается из меню, курс передается в командной строке Разработать пакетный файл для установки даты и времени (параметры – в командной строке) Разработать пакетный файл для очистки студенческих каталогов: удаления файлов *.BAK, *.TMP и др. Номера очищаемых курсов передаются в командной строке. Разработать пакетный файл для вывода (на экран, файл, принтер) списка файлов из каталогов студентов. Шифр группы - из командной строки, направление вывода - из меню. Разработать пакетный файл для перехода в каталог студента, если он существует и его архивирования Разработать пакетный файл для вывода текстового файла на экран по страницам. Имя файла передается в командной строке. Разработать пакетный файл для перезаписи файлов документов (*.doc, *.txt) из одного каталога в другой с обновлением Разработать пакетный файл для копирования всех файлов документов (*.doc, *.txt) из всех студенческих подкаталогов в директорию «Мои документы» Разработать пакетный файл для проверки наличия файлов документов (*.doc, *.txt) в данном подкаталоге (имя – в параметрах). В случае положительного ответа – вывести их список ЛИТЕРАТУРА
1.Финогенов Ms-Dos: Самоучитель по системным функциям, Горячая линия-телеком, 2001, 382 стр.
2.Панкратов Операционная система MS-DOS 6.22: Справочное пособие, Познавательная книга плюс, 2001, 224 стр.
3.Губин А. Работа в Ms-Dos для всех: Практическое пособие, Радио и связь, 1993, 160 стр.
4.Франкен Г., Молявко С. MS-DOS 6.2 для пользователя, Киев, BHV, 1994, Москва, БИНОМ, 1994.
5.Фигурнов В. IBM PC для пользователя, г.Уфа, НПО “Информатика и Компьютеры”, 1993.
6.Руководство по программированию под управлением MS DOS:Пер.с фр./Пьеро Ф.,Люкзак Ж.-Л.,Рейко Ф.;Под ред.Пьеро Ф..-М.:Радио и связь,1995.-544с.
Скажем, есть переменная с именем %pathtofolder% , которая проясняет, что это полный путь к папке.
Я хочу удалить все файлы и подпапки в этом каталоге, но не сам каталог.
Но может быть ошибка типа «этот файл / папка уже используется» . когда это происходит, нужно просто продолжить и пропустить этот файл / папку.
Есть ли какая-то команда для этого?
Это безумие, как трудно Windows удалить папки . Или создать папку, начинающуюся с точки . Слава богу за интеграцию Bash в Windows! rm -rf path\to\folder работает в Windows 10 (или может прийти из Git Bash . в любом случае, если у вас есть, что стоит попробовать!)Вы можете использовать этот скрипт для очистки папки и файлов в C:\Temp исходном коде :
Создайте пакетный файл (скажем, delete.bat), содержащий указанную выше команду. Перейдите в папку, в которой находится файл delete.bat, а затем выполните команду: delete.bat
Я пробовал, но, к сожалению, файлы, которые не были удалены, удаляются только подпапки. Например, у меня есть папка с именем Test. Он содержит 2 папки с именами «Ripon» и «Wasim» и содержит файл с именем «riponalwasim.txt». Подпапки Ripon и Wasim были удалены, но riponalwasim.txt не был удален. Используйте одиночный знак процента, если вы хотите работать напрямую из командной строки, например %p Грустно, что это занимает 2 строки, но, по крайней мере, это работает! Я устал искать работающий «однострочник» и пойду с этим, спасибо! Вы можете использовать оператор «&&» для выполнения двух команд в одной строке без файла bat (обратите внимание на один «%» вместо «%%»). del / s / q "myfolder *" && FOR / D% p IN ("myfolder *") DO rmdir "% p" / s / q <for / F "delims =" %% i in ('dir / b / a-d') do (echo del "%% i" / q)> может помочь для файлов (просто удалите это эхо)rmdir моя самая любимая команда для работы. Он работает для удаления огромных файлов и папок с подпапками. Резервная копия не создается, поэтому перед выполнением этой команды убедитесь, что вы скопировали свои файлы безопасно.
Это автоматически удаляет папку и все файлы и подпапки.
Похоже, это удаляет путь к каталогу, который ОП хотел сохранить. Это приведет к удалению самой папки, поэтому вам нужно добавить еще одну команду: md FOLDERNAME (см. Ответ от @rakoczyn ниже). Что вы подразумеваете под «резервное копирование создано» здесь? Я не вижу ничего, что могло бы создать какую-либо резервную копию . Чтобы не удалять саму папку, сделайте ее текущей папкой, а затем используйте «.» как FOLDERNAME. Повторное создание этого впоследствии не обязательно то же самое, потому что ACL могли быть потеряны. cd "FOLDERNAME" RD . /S /QСамое простое решение, которое я могу придумать, - это удалить весь каталог с помощью
Затем создайте этот каталог снова:
Что делать, если у вас есть разрешение на удаление, но не создание новых папок? Я надеюсь, что это возможно :) Это плохое решение, так как оно приводит к гонке в файловой системе за узел каталога, то есть вторая команда может потерпеть неудачу, если выполняется сразу после нее. Кроме того , плохое решение , если каталог имеет специальные разрешения , которые вы просто Nuked гм (упс) Не откладывайте на ответ: «Каталог не пустой». Просто дважды введите команду :-) RD и RMDIR - это одна и та же команда, и, поскольку вы опубликовали этот ответ через 9 месяцев после того, как кто-то дал тот же ответ, почему люди дают вам очки?Это удалит папки и файлы и оставит папку позади.
Для тех, кто не уверен в этом подходе: он определенно не создает каталог заново. Без 2>nul него выводится «Процесс не может получить доступ к файлу, потому что он используется другим процессом». Я ненавижу, что Windows не может удалить файлы и папки, используемые какой-либо программой. И мне нравится, что вы использовали это в свою пользу в этой строчке. Так что это убер-магия, как мы очищаем папку в Windows ?? Впечатляет :) @mlvljr Только если вы хотите сохранить родительскую папку тоже. RD /? покажет вам простой способ очистить папку. Это хорошо, если вам нужно вернуться на исходную позицию, иначе просто CD mypath && RD /S . будет достаточно. Мне не нравится, что вам приходится повторять свой путь дважды, хотя для длинных путей его становится трудно читать. Так что я бы просто добавил set p="mypath" в начале.. удаляет все файлы и папки в данном каталоге, но не сам каталог.
это должен быть правильный ответ .. просто сделайте простой .. deletemyfoldercontents.bat файл .. вставьте ваш путь, и он работает как шарм .. В командной строке DEL также отсутствует опция /A для удаления файлов со скрытым набором атрибутов, и %dir%\* их следует заключать в двойные кавычки, как, например, "%dir%\*" для каталогов, содержащих пробел или один из этих символов &()[]<>^=;!'+,`. И командную строку FOR следует изменить на, for /F "eol=| delims=" %%I in ('dir "%dir%\*" /AD /B 2^>nul') do rd /Q /S "%dir%\%%I" поскольку FOR игнорирует каталоги со скрытым набором атрибутов. DIR с параметрами /AD /B выводит все каталоги только с их именами. Кстати, dir это не хорошее название для переменной среды.
@RMiranda, в моих тестах, он делает именно так, как просил ОП. У вас есть случай, когда он не удаляет подпапки? Отвечает ли этот ответ требованию «может быть ошибка типа« этот файл / папка уже используется ». когда это происходит, он должен просто продолжить и пропустить этот файл / папку». ?Обновление :
Из этого полезного комментария (спасибо Moritz Both ) вы можете добавить && между ними, поэтому RMDIR не запустите, если CD команда не будет выполнена (например, имя каталога с ошибкой):
Это идеально подходит для очистки temp, но это cd [Your_Folder] очень важно - я должен помнить об этом, чтобы не удалять сам каталог . Это правильное решение. Добавьте && между командами вместо разрыва строки, и вы в безопасности от сбой CD. Это простое и правильное решение. Даже работает с командной оболочкой Azure! довольно плохое решение . Мне, например, нужно это удаление командной строки для обновления SVN - я хочу удалить все файлы и папки, прежде чем я сделаю обновление SVN, потому что могут быть некоторые изменения на машине, где я использую это, но актуально только проверенные в пунктах. Делать RMDIR / S / Q. также удаляет ссылку SVN и, следовательно, больше не делает папку svn/ S: удаляет дерево каталогов (указанный каталог и все его подкаталоги, включая все файлы).
/ Q: Указывает тихий режим. Не запрашивает подтверждения при удалении дерева каталогов. (Обратите внимание, что / q работает, только если указан / s.)
RD расшифровывается как REMOVE Directory.
/ S: Удалить все файлы и подпапки в дополнение к самой папке. Используйте это, чтобы удалить все дерево папок.
/ Q: Тихо - не отображать подтверждение YN
проголосовал за то, что был единственным, кто объяснил, что /S и что /Q значит Номер rd эквивалентен rmdir и удалит сам каталог, а не тот, который хочет OP. Отвечает ли этот ответ требованию «может быть ошибка типа« этот файл / папка уже используется ». когда это происходит, он должен просто продолжить и пропустить этот файл / папку.»? Например, прерывается ли он полностью вместо продолжения?Я использую Powershell
Он удалит содержимое папки, а не саму папку.
Ответ rhellem недавно, но это единственный ответ, который действительно сделает это для меня. (Win 8.1, не по выбору) Из командной строки пакета: powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force" Обратите внимание, что "*" необходимо, или оно удалит папку.Простое решение для единой командной строки, которое, конечно же, также можно использовать в командном файле:
Эта командная строка содержит три команды, выполняемые одна за другой.
Первая команда PUSHD помещает текущий путь к каталогу в стек, а затем создает %PathToFolder% текущий каталог для запуска процесса команды.
Это также работает для путей UNC по умолчанию, поскольку расширения команд включены по умолчанию, и в этом случае PUSHD создает временную букву диска, которая указывает на указанный сетевой ресурс, а затем изменяет текущий диск и каталог, используя вновь определенную букву диска.
Система не может найти указанный путь.
Следующая команда RD выполняется только в том случае, если изменение текущего каталога для текущего командного процесса на указанный каталог прошло успешно, то есть указанный каталог вообще существует.
Команда RD с параметрами /Q и тихо /S удаляет каталог со всеми подкаталогами, даже если указанный каталог содержит файлы или папки со скрытым атрибутом или с установленным атрибутом только для чтения. Системный атрибут никогда не препятствует удалению файла или папки.
Папки, используемые в качестве текущего каталога для любого запущенного процесса. Все дерево папок в такой папке не может быть удалено, если папка используется в качестве текущего каталога для любого запущенного процесса.
Файлы, открытые в настоящее время любым запущенным процессом с правами доступа к файлу, установленными для открытия файла, чтобы предотвратить удаление файла во время открытия работающим приложением / процессом. Такой открытый файл также предотвращает удаление всего дерева папок в открытый файл.
Файлы / папки, для которых у текущего пользователя нет необходимых (NTFS) разрешений на удаление файла / папки, что также предотвращает удаление дерева папок в этот файл / папку.
Процесс не может получить доступ к файлу, потому что он используется другим процессом.
Третья команда, POPD , выполняется независимо от значения выхода команды RD .
POPD извлекает путь каталога, выдвинутый PUSHD из стека, и изменяет текущий каталог для запуска процесса команды на этот каталог, то есть восстанавливает исходный текущий каталог. POPD удаляет временную букву диска, созданную PUSHD в случае пути к папке UNC.
Примечание: POPD может молча прекратить восстановление первоначального текущего каталога в случае, если исходный текущий каталог был подкаталогом каталога для очистки, который больше не существует. В этом особом случае %PathToFolder% остается текущий каталог. Поэтому желательно запускать командную строку выше, а не из подкаталога %PathToFolder% .
Еще один интересный факт: я пробовал в командной строке также использовать UNC-путь, используя общий каталог C:\Temp с именем общего ресурса Temp и используя UNC-путь, \\%COMPUTERNAME%\Temp\CleanTest назначенный переменной среды PathToFolder в Windows 7. Если текущий каталог при запуске командной строки является подкаталогом общего локального каталога папка доступ с помощью UNC - пути, то есть C:\Temp\CleanTest\Subfolder1 , Subfolder1 удаляются с помощью РДА , а следующий POPD терпит неудачу молча делаю C:\Temp\CleanTest\Subfolder1 снова текущий каталог в результате Z:\CleanTest оставшегося в качестве текущего каталога для процесса команды работает. Таким образом, в этом очень особом случае временная буква диска остается до тех пор, пока текущий каталог не будет изменен, например, с помощью cd /D %SystemRoot% в локальный каталог действительно существует. К сожалению, POPD не завершается со значением больше 0, если не удается восстановить исходный текущий каталог, что делает невозможным обнаружение этого особого состояния ошибки, используя только код выхода POPD . Однако можно предположить, что никто никогда не сталкивался с этим особенным случаем ошибки, поскольку пути UNC обычно не используются для доступа к локальным файлам и папкам.
Чтобы лучше понять используемые команды, откройте окно командной строки, выполните там следующие команды и внимательно прочитайте справку, отображаемую для каждой команды.
Теперь давайте посмотрим на решение для пакетных файлов, используя команду DEL для удаления файлов в %PathToFolder% и FOR и RD для удаления вложенных папок в %PathToFolder% .
Пакетный файл сначала гарантирует, что переменная среды PathToFolder действительно определена с путем к папке без двойных кавычек и без обратной косой черты в конце. Обратная косая черта в конце не будет проблемой, но двойные кавычки в пути к папке могут быть проблематичными, поскольку PathToFolder во время выполнения пакетного файла значение объединяется с другими строками.
Важны две строки:
Команда DEL используется для удаления всех файлов в указанном каталоге.
Команды FOR и RD используются для удаления всех подкаталогов в указанном каталоге. Но for /D не используется, поскольку FOR игнорирует в этом случае подкаталоги с установленным атрибутом hidden. По этой причине for /F используется для запуска следующей командной строки в отдельном командном процессе, запущенном в фоновом режиме с помощью %ComSpec% /c :
Оператор перенаправления > должен быть экранирован с помощью символа вставки, ^ в командной строке FOR интерпретироваться как литеральный символ, когда интерпретатор команд Windows обрабатывает эту командную строку перед выполнением команды FOR, которая выполняет встроенную dir командную строку в отдельном запущенном командном процессе. на заднем фоне.
FOR обрабатывает захваченный вывод, записанный для обработки STDOUT запущенного командного процесса, которые являются именами подкаталогов без пути и никогда не заключаются в двойные кавычки.
Параметр FOR with /F игнорирует пустые строки, которые здесь не встречаются, поскольку DIR с параметром /B не выводит пустые строки.
FOR также игнорирует строки, начинающиеся с точки с запятой, которая является символом конца строки по умолчанию. Имя каталога может начинаться с точки с запятой. По этой причине eol=| используется для определения символа вертикальной черты как символа конца строки, который ни один каталог или файл не может иметь в своем имени.
FOR разделит строку на подстроки, используя пробел и горизонтальную табуляцию в качестве разделителей, и назначит только первую строку с пробелом / табуляцией для указанной переменной цикла I . Такое поведение разделения здесь нежелательно, поскольку имя каталога может содержать один или несколько пробелов. Поэтому delims= используется для определения пустого списка разделителей, чтобы отключить поведение разделения строк и получить присвоение переменной цикла I , всегда полное имя каталога.
Команда FOR запускает команду RD для каждого имени каталога без пути, поэтому в командной строке RD необходимо еще раз указать путь к папке, который объединяется с именем подпапки.
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.
По умолчанию команды пакетного файла перед исполнением выводятся на экран, что не очень эстетично. С помощью команды ECHO OFF можно отключить дублирование вывода команд на экран. ECHO ON восстанавливает режим дублирования. Кроме этого, можно отключить дублирование отдельной строки, если предварить ее символом «@». И, наконец, может вывести пустую строку комбинацией ECHO . (с точкой в конце).
При запуске командных файлов в командной строке можно указывать произвольно е число параметров, которые затем можно использовать внутри пакетного файла.
Для доступа к параметрам применяются символы %0 – имя файла, %1-%9 – значения первых девяти параметров соответственно. Например, имеется командный файл copier.bat следующего содержания:
ECHO Файл %0 копирует каталог %1 в %2
При запуске его из командной строки с 2 параметрами:
copier.bat C:\Programs D:\Backup
При необходимости можно использовать более девяти параметров командной строки с помощью команды SHIFT , которая изменяет значения замещаемых параметров с %0 по %9, копируя каждый параметр в предыдущий. Значение %1 – в %0, %2 в %1 и т.д., 10 параметр в %9. Команда, обратная SHIFT, отсутствует, поэтому восстановить параметры уже не удастся.
Кроме того, в командных файлах можно использовать переменные окружения и объявлять собственные с помощью команды SET. Все переменные рассматриваются как строки и в Windows 9x над ними нельзя производить арифметические действия (в отличие от NT), а только конкатенацию (просто слитно 2 переменные без знака «+»). Например, в результате выполнения командного файла:
ECHO Переменная С=%С%
на экран выведется «Переменная С= Первый Второй».
Для управления выполнением командных файлов существуют команды приостановки, перехода, условного ветвления, циклов и вызова внешних командных файлов.
Для того, чтобы прервать выполнение командного файла, надо нажать <CTRL> +<C> или <CTRL>+<Break> (в Windows NT есть команда выхода EXIT /B). Для приостановки с выдачей запроса на нажатие любой клавиши есть команда PAUSE, которую рекомендуется использовать перед выполнением потенциально опасных действий. Например:
ECHO Сейчас будут удалены все файлы в каталоге C :\Мои документы
ECHO Для отмены нажмите Ctrl - C
DEL “ C :\Мои документы\*.*”
Для организации циклов используется конструкция:
FOR %%переменная IN ( множество ) DO команда [параметры]
Отличие от классических языков программирования в том, что не происходит регулярного приращения счетчика, а вместо этого используется заданный список значений в параметре множество . Скобки здесь обязательны, внутри которых одно или несколько строковых значений, разделенных запятыми. Например:
FOR %%i IN ( Раз , Два , Три ) DO ECHO %%i
В качестве переменных цикла можно использовать лишь имена, состоящие из одной буквы. Как видите нет командных скобок (типа begin end), поэтому весь цикл должен быть записан в одной строке, вложенные циклы не допускаются.
В параметре множество можно представить одну или несколько групп файлов. Например, для вывода всех файлов с расширениями *.doc и *.txt:
FOR %%f IN(C:\TEXT\*.doc C:\TEXT\*.prn) DO ECHO %%f >> list.txt
Из одного командного файла можно вызвать другой просто указав его имя. Однако в этом случае управление назад не вернется, для этого существует команда CALL , с помощью которой можно в командных файлах организовать подобие подпрограмм. Например, командный файл proc.bat:
ECHO Записываем файл %1. txt
ECHO Параметр вызова: %1 > %1. txt
можно вызвать в другом пакетной файле:
FOR %%i IN ( Первый , Второй , Третий ) DO CALL proc.bat %%i
в результате proc.bat вызывается 3 раза и создает 3 файла – Первый. txt, Второй. txt и Третий.txt с соответствующим текстом.
Командный файл может содержать метки, начинающиеся с двоеточия («:») и команды GOTO перехода к этим меткам. Имя метки задается набором символов, следующих за двоеточием до первого пробела или конца строки. Например:
ECHO Эта строка никогда не выполнится
REM Продолжение выполнения
C помощью команды IF в пакетных файлах можно выполнять обработку условий 3 типов:
1) IF [ NOT ] строка1==строка2 команда
Условие считается истинным (обратите внимание на 2 знака равно) при точном совпадении обеих строк (регистр имеет значение). Строки могут быть литеральными (кавычки для них не требуются) или представлять значения переменных. Например:
IF %1%==Петя ECHO Привет, Петя !
Для предотвращения синтаксических ошибок в случае отсутствия переменных или параметров, рекомендуется при сравнении строк приписывать им вначале какой-нибудь символ, например:
IF -%MyVar%==-C:\ ECHO OK !
2) IF [ NOT ] EXIST файл команда
Проверка существования заданного файла (кавычки для имени также не требуются, кроме длинных). Например:
IF NOT EXIST C :\ autoexec . bat ECHO У вас нет файла автозагрузки !
IF EXIST “ C :\Мои документы\Работа. doc ” ECHO Все в порядке !
3) IF [ NOT ] ERRORLEVEL число команда
Условие считается истинным, если последняя запущенная программа или команда завершилась с кодом возврата, равным либо превышающим указанное число. Например:
xcopy my . txt c :\ > nul
IF errorlevel 1 goto ErrOccurred
echo Копирование прошло без проблем.
echo При выполнениеи команды возникла ошибка !
К сожалению в командных файлах нет возможности организоовать полноценный диалог с пользователем путем ввода строк с клавиатуры. Единственное средство – команда CHOICE, которая выводит подсказку и ждет выбора пользователем варианта из указанного набора клавиш.
CHOICE [/C[:]варианты] [/N] [/S] [/T[:]c,nn] [текст]
Если в команде не задается текст, то пользователь видит на экране только подсказку. Рассмотрим подробно ключи этой команды:
задает варианты ответа, по умолчанию YN
CHOICE /C:ync Как дела ?
Yes, No, Cancel [Y, N, C] ? Как дела
выводит только текст без вариантов ответа (клавиши для ответа работают)
CHOICE /N Ну как
учет регистра символов (по умолчанию верхний и нижний воспринимаются одинаково)
c – символ по умолчанию, который вводится после указанной в nn секунд паузы
CHOICE /c:ync /t:N,10
(после 10 сек выбирается N)
После выполнения команды CHOICE переменная ERRORLEVEL приобретает значение, равное номеру варианта ответа, что позволяет использовать команду IF для организации ветвления. Если происходит ошибка, CHOICE возвращает 255, прерывание по <CTRL>+<C> или < CTRL >+<Break> - 0. В качестве примера рассмотрим простейшее меню:
ECHO Выберите режим
ECHO 1 - Простой
ECHO 2 - Расширенный
CHOICE / c :12 Введите пункт меню
IF ERRORLEVEL 2 goto Choice2
IF ERRORLEVEL 1 goto Choice 1
ECHO Выход из меню
ECHO Выбран пункт 1
ECHO Выбран пункт 2
Особенности командных файлов в Windows NT - XP
Фактически в составе Windows NT имеются два командных интерпретатора – command . com во встроенной виртуальной машине MS-Dos (аналогичный по возможностям рассмотренному ранее) и специальный интерпретатор команд Windows NT – cmd . exe (% Sytem Root %\ System 32) .
Для запуска командного интерпретатора можно вызвать ярлык «Пуск/Программы/Командная строка», файловый менеджер типа FAR или загрузить cmd.exe непосредственно. При запуске cmd.exe можно использовать, как и в ключи /C, /K, а также задание цвета и кодировки. Ключи /X и /Y соответственно включают и выключают расширенный режим работы интерпретатора (по умолчанию установлен).
Работа с переменными среды текущего командного окна осуществляется, как и в Windows 9x, с помощью команды set. Естественно, изменения, которые вносятся в переменные среды этой команды, актуальны только в текущем командном окне.
Новые, весьма полезные, возможности у команды set появляются при включении расширенной обработки команд. Теперь переменные могут рассматриваться как числа и с ними можно производить арифметические вычисления. Для этой цели имеется дополнительный ключ /а:
SET /А переменная= выражение
Использование ключа /а указывает, что стоящая справа от знака равенства строка является числовым выражением, значение которого вычисляется.
Например, если задать команду
то значение переменной M будет равно трем.
Обработчик выражений, входящих в команду set, очень прост и поддерживает следующие операции, перечисленные в порядке убывания приоритета:
группировка с помощью круглых скобок ();
арифметические операторы умножения (*), целочисленного деления (/), остатка от деления (%);
арифметические операторы сложения (+) и вычитания (-);
двоичный сдвиг влево (<<) и вправо (>>);
двоичное исключающее ИЛИ ( л );
разделение операторов с помощью запятой (,).
При использовании любых логических или двоичных операторов необходимо заключить строку выражения в кавычки. Можно использовать префиксы для систем счисления – 0x -16, 0b - 2, 0 - 8. Любые нечисловые строки в выражении рассматриваются как имена переменных среды, значения которых преобразуются в числовой вид перед использованием. Если переменная с указанным именем не определена, вместо нее подставляется нулевое значение. Например, если переменная X не была предварительно задана, то в результате выполнения команды
значение n будет равно пяти.
Таким образом, применение ключа /а позволяет выполнять арифметические операции со значениями переменных среды, причем не нужно вводить знаки % для получения их значений. Кроме того, усовершенствована работа с переменными среды как со строками (кроме конкатенации – замена вхождений и выделение подстрок).
Командные файлы в Windows NT, как и в Windows 9x, являются обычными текстовыми файлами, однако для них в операционной системе зарезервированы не одно, а два расширения: bat и cmd. Новые возможности командных файлов связаны с командами setlocal, endlocal, pushd, popd, a также изменениями в goto, call, if, for.
В Windows NT имеется возможность локализовать изменения переменных среды внутри пакетного файла, т. е. автоматически восстанавливать значения всех переменных в том виде, в каком они были до начала запуска данного файла. Команда SETLOCAL определяет начало области локальных установок переменных среды, т.е. изменения среды, внесенные после выполнения setlocal, будут являться локальными относительно текущего пакетного файла. Каждая команда setlocal должна иметь соответствующую команду ENDLOCAL для восстановления прежних значений переменных среды.
При работе с параметрами командного файла можно обозначить все аргументы через %*, а также использовать синтаксический анализ:
Читайте также: