Как через бат открыть файл в папке

Обновлено: 18.09.2024

В операционной системе MS-DOS и во всех операционных системах семейства Microsoft Windows простейшим средством автоматизации обработки файлов (и каталогов) служат так называемые командные файлы. Командные файлы — не единственное средство автоматизации работы пользователя даже из числа встроенных. В операционных системах семейства Microsoft Windows, начиная с версии 98, имеется еще Windows Script(ing) Host. Для этих же целей можно использовать какой-нибудь интерпретируемый язык Perl, Python или Ruby. Однако перечисленные средства, хотя и мощны, требуют умения программировать, т.е. составлять и, что немаловажно, отлаживать программы, хотя бы на неплохом любительском уровне. Использование же командных файлов доступно всякому без особенной подготовки.

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

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

Одно из общих правил синтаксиса команд MS-DOS состоит в том, что при указании параметров сначала указывается источник, а потом результат. Например, если мы хотим переместить файл file 1.txt из каталога box в каталог table, мы должны ввести команду: move box\ file 1.txt table. Сначала что переместить, потом куда переместить. Если нужно переименовать файл lena.txt в файл natasha.txt, то команда должна быть записана вот так: ren lena.txt natasha.txt . Сначала что переименовать, потом во что переименовать.

При работе с файловыми командами исключительную важность приобретает понятие текущего каталога. Дело в том, что при указании файла в качестве параметра команды мы всегда используем один из двух возможных способов указания на них: либо абсолютный (полный) путь, либо относительный путь. В полном пути мы указываем все, начиная с диска (или сетевого имени компьютера), например d:\misha\box\ car .txt . Какой бы каталог ни оказался текущим в момент ввода команды, полный путь будет соответствовать одному и тому же файлу. Для относительного пути текущий каталог служит отправной точкой. Простейший случай относительного пути — имя файла. В контексте выполнения команды оно означает файл с таким именем, расположенный в текущем каталоге. Для записи относительного пути к текущему каталогу существует условная запись . (точка). Для записи относительного пути к каталогу, в котором содержится текущий каталог, существует условная запись .. (две точки). Команда, показанная далее, копирует все файлы из текущего каталога в каталог neighbour, расположенный рядом с ним: copy *.* .\neighbour.

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

Командным файлам принято давать расширение bat. По нему файлы этого типа опознаются командным процессором. Этот файл можно назвать, например, make-help.bat.

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

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

Пусть нужно создать командный файл, который сначала формирует справку с описанием заданной пользователем команды, а потом загружает его для просмотра в блокнот. Фокус в том, чтобы при очередном запуске командного файла каким-то образом сообщить ему, какая именно команда нас интересует на этот раз.

Для решения этой задачи предусмотрен механизм обработки параметров. Работает он довольно просто. Если при запуске командного файла пользователь указал несколько параметров, то в тексте командного файла первый из них мы обозначаем записью %1, второй записью %2, третий записью %3 и т.д. Этими обозначениями используются в тексте командного файла примерно так же, как в естественной речи местоимениями. Текст командного файла, решающего поставленную задачу, приведен далее:

Пусть командному файлу присвоили имя show-help.bat. Для того чтобы загрузить в блокнот описание команды, например, dir, нужно ввести команду следующим образом:

show-help.bat dir. Следующий командный файл создает каталог с именем, указанным в первом параметре, и записывает в него файл с текстом описания команды, указанной во втором параметре:

Переменной называется поименованное значение. В учебниках по программированию переменную обычно сравнивают с конвертом, на котором написано имя. Внутрь конверта можно положить нечто, например, определенную сумму денег — это ее значение. Как и в случае с конвертом, значение переменной можно изменить. Для объявления переменной и одновременно для присвоения ей значения применяется команда set. Пример записи этой команды показан далее:

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

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

Для чего это нужно? Проверка условия — почти необходимая мера при создании командных файлов, использующих параметры. Перед тем, как начинать работу, командный файл, вообще говоря, должен удостовериться в том, что ему передан корректный набор параметров. В противном случае велик риск, что он выполнится неверно или безрезультатно, а пользователю останется только гадать, в чем же проблема. Более того, если командный файл удаляет, перемещает или перезаписывает какие-либо данные, то при некорректных параметрах он может даже нанести ущерб.

Предложенный способ проверки параметра не самый удачный. Во-первых, если пользователь по ошибке укажет в качестве параметра имя несуществующего файла, командный файл этим удовлетворится и предпримет попытку компиляции. Более правильный способ — проверить, существует ли такой файл в действительности. Для этого в языке команд MS-DOS предусмотрено специальное слово exist. Поэтому лучше было бы написать: if exist %1.hpj goto compile. Во-вторых, активное использование команды goto (т.н. безусловного перехода) и меток сильно запутывают код. Технически они ничем не плохи, но отлаживать и сопровождать командный файл, написанный в таком стиле, довольно неудобно. Поэтому программисты издавна считают безусловный переход приемом нежелательным. Ниже показан более правильный, с точки зрения стиля программирования, структурированный вариант, в котором используется конструкция if…else. Работает она так: если условие истинно, выполняются команды в скобках после if, а если ложно, то в скобках после else.

Приведем еще один пример работы с проверками. Следующий командный файл создает каталог с именем help-files (предположим, для выгрузки в него скомпилированных help -файлов). При этом, если каталог с таким именем уже существует (и в нем, вероятно, находятся старые help -файлы, которые не хотелось бы терять: вдруг новые окажутся хуже?), командный файл присваивает ему расширение bak. Но если каталог help-files.bak уже существовал, то командный файл его удаляет (будем считать, что одной резервной копии нам хватит):

Команда for позволяет организовать выполнение повторяющихся однотипных действий. Можно использовать ее для того, чтобы вывести на экран числа от одного до десяти, как показано ниже:

Переменная i называется счетчиком цикла. В силу своеобразия синтаксиса команды for, имя счетчика цикла должно состоять из одной буквы. Причем, если мы пишем командный файл, то перед именем счетчика цикла надо поставить сдвоенный знак процента, если же мы просто набираем команду в командной строке, то одиночный. Логика работы этой команды такова. После слова in указан диапазон изменения счетчика цикла. В данном варианте команды это тройка чисел: начальное значение счетчика, шаг счета, предельное значение счетчика. При выполнении команды командный процессор сначала присвоит переменной i значение 1, а потом на каждом шаге цикла будет увеличивать его на 1, пока оно не превысит 10. Очевидно, таких шагов получится десять. Если бы в качестве шага счета мы указали число 2, то цикл выполнился бы пять раз. На каждом шаге цикла выполняется тело цикла, написанное после слова do. В приведенном примере это команда echo, которая выводит на экран текущее значение счетчика цикла. Наверно можно придумать ситуацию, когда что-то подобное на самом деле требуется, но обычно команда for используется для перебора и обработки файлов. Надо сказать, что в достаточно простых случаях массовая обработка файлов выполняется с помощью подстановочных символов. Если, мы хотим всем файлам в текущем каталоге заменить расширение .htm на .html, мы вводим команду ren *.htm *.html. Но если то же самое надо сделать не в одном каталоге, а в дереве каталогов, то без команды for не обойтись. Приведенный ниже командный файл выполняет эту операцию для всех htm-файлов в подкаталоге website текущего каталога. Точнее, во всем дереве каталогов, которое находится внутри website:

Ключ /r указывает на необходимость обхода каталога website и всех его внутренностей. Если его не указать (но тогда и каталог указывать не разрешается), то обработаны будут только файлы в текущем каталоге. Диапазоном значений счетчика цикла в данном варианте команды является множество всех файлов с расширением .htm, находящихся внутри каталога (точнее, дерева) website. Странная на первый взгляд запись ~ni означает, что из значения переменной i требуется выделить только имя файла. В языке команд MS-DOS предусмотрено несколько таких модификаторов, например, запись ~хi обозначает расширение файла. Все модификаторы описаны в справке по команде for. Тело цикла может состоять из нескольких команд, заключенных в скобки:

Существует много способов защиты папки на компьютере с помощью пароля, но большинство из них требуют установки специального программного обеспечения. При этом многие из этих программ являются платными. Есть простой способ поставить пароль на папку при помощи пакетного файла. И хотя это способ не дает 100-процентной защиты, его можно использовать как один из вариантов для защиты ваших данных.

Папка с паролем

Установка пароля на папку

Для начала создадим обычную папку в любом месте с произвольным именем. Например, Личная.

Создание папки Личная

Потом нужно войти в эту папку и создать в ней текстовый документ с любым именем. Это легко сделать при помощи контекстного меню.

Создание текстового файла

Открываем текстовый документ и вставляем следующий код:

cls
@ECHO OFF
title Folder Private
if EXIST "Compconfig Locker" goto UNLOCK
if NOT EXIST Private goto MDLOCKER
:CONFIRM
echo Are you sure you want to lock the folder(Y/N)
set/p "cho=>"
if %cho%==Y goto LOCK
if %cho%==y goto LOCK
if %cho%==n goto END
if %cho%==N goto END
echo Invalid choice.
goto CONFIRM
:LOCK
ren Private "Compconfig Locker"
attrib +h +s "Compconfig Locker"
echo Folder locked
goto End
:UNLOCK
echo Enter password to unlock folder
set/p "pass=>"
if NOT %pass%== PASSWORD_GOES_HERE goto FAIL
attrib -h -s "Compconfig Locker"
ren "Compconfig Locker" Private
echo Folder Unlocked successfully
goto End
:FAIL
echo Invalid password
goto end
:MDLOCKER
md Private
echo Private created successfully
goto End
:End

Теперь находим в коде поле PASSWORD_GOES_HERE и заменяем его на нужный нам пароль. Сохраняем файл и переименовываем его в locker.bat.

! Если у вас в системе отключено отображение расширений файлов, то могут возникнуть трудности с изменением имени файла. Дело в том, что в файле locker.bat, locker — это название файла, а .bat — расширение. При отключенном отображении расширений файлов, вы видите только название файла и когда переименовываете текстовый файл, то присваиваете ему имя locker.bat, а расширение остается прежним — txt. Поэтому, чтобы не возникало таких проблем, перед тем как переименовывать файл нужно включить отображение расширений файлов в Windows.

Переименовывание текстового документа

Проверка работы кода

Запускаем файл locker.bat, в результате чего должна создаться папка Private, в которую нужно поместить все ваши документы, которые вы ходите защитить. После этого запускаем пакетный файл locker.bat снова.

Пакетный файл locker.bat

Теперь вам предложат заблокировать папку. Выбираем Y.

Блокировка папки

При этом ваша папка Private исчезнет.

Папка скрывается

Если запустить файл locker.bat еще раз будет выдан запрос на ввод пароля.

Запрос на ввод пароля

При вводе пароля, который вы указали в пакетном файле, отобразится папка Private и с ней снова можно работать.

Теперь Вы спросите, зачем нужно уметь писать такие бат файлы? И зачем они нужны? Попытаюсь объяснить.

Во-первых, они используются для облегчения работы, т.е. например Вам нужно постоянно выполнять какую-нибудь операцию каждый день (например, создавать архив тех или иных документов), с помощью батника это можно автоматизировать, и Вы в этом уже не будете принимать участия.

Во-вторых, эти пакетные файлы очень мощные (если конечно уметь их писать), т.е. Вы можете даже написать неплохую программу (я имею в виду по функционалу). Лично мне они очень помогают в работе, и о некоторых вещах я уже просто забыл, когда это делал я в ручную.

Для начала я приведу пример батника, который я использую у себя на работе для архивации документов.

Теперь немного расскажу, что делает этот батник. Запускается WinRar, потом идут команды винрара:

  • a — это добавить в архив;
  • -r — обрабатывать вложенные папки;
  • -dh — открывать совместно используемые файлы;
  • -ed — не добавлять пустые папки;
  • YYYY-mm-dd — добавляем к имени архива текущую дату (формат даты);
  • E:\arhaccounts\ — путь, где будет лежать конечный архив;
  • d:\accounts\*.doc — путь и маска файлов, какие нужно заархивировать.

В данном случае мы архивируем все документы Word, Excel и текстовые файлы, архивировать остальные нам не требуется. У нас архивация идет на другой диск, и мы еще копируем полученный архив на другой компьютер, для того чтобы архивы хранились и в другом кабинете. Копирование идет по сети соответственно компьютер, на который копируется архив, должен быть включен. Для этого можно использовать такую команду:

Примеры команд для bat файлов

Теперь рассмотрим основные команды, которые Вы можете использовать.

Если Вам нужно удалить файл пропишите следующие:

Для того чтобы удалить весь каталог пропишите:

Вдруг Вам нужно удалять каждый раз все из какого-нибудь каталога, то используйте вот что:

Сейчас давайте рассмотрим пример посложней, в котором уже выполняется условие:

Теперь объясняю, допустим, Вам нужно разархивировать архив test.rar, в котором будет много файлов, но если там окажется файл 123.rar его нужно будет разархивировать в корень диска C, а остальные файлы чтобы остались в том же каталоге не тронутыми.

По порядку, команда @echo off нужна, для того чтобы на экране у нас ничего не отражалось (в принципе, если не нужно можете не писать эту строку). Далее у нас запускается винрар и распаковывает архив test.rar в папку test. Затем идет условие, если в папке test (после распаковки test.rar) у нас не окажется файла 123.rar, то у нас просто выполнение батника переходит к строке :1 и потом просто удаляется файл test.rar за не надобностью т.к. все что нам нужно мы уже распаковали. Но если там оказывается файл 123.rar, то выполнение батника переходит к строке :2, после которой уже идет распаковка файла 123.rar в корень диска C. Другими словами у нас выполняется условие, если есть файл то делать это, если нет файла, делать вот это. Допустим, если не прописать условие в данном примере, то у нас батник выдаст ошибку, тогда когда у нас не окажется файла 123.rar в данной папке.

А сейчас рассмотрим такой пример, допустим, Вам нужно каждый раз перемещать из каталога расположенного на диске D файлы на флешку. Вы каждый раз должны будете заходить мой компьютер диск D, выбирать нужную папку, выделять все файлы из нее и вырезать, а потом только заходить на флешку и вставлять. С помощью батника это делается в один клик (с одним условием, что флешка каждый раз будет, например диском G или тем какой у Вас). Вот пример такого батника:

На самом деле про написание батников можно разговаривать много и в одну статью это, конечно же, не уместить, здесь я показал всего лишь принципы, которые используются при написании bat файлов, так сказать основу. Если Вы хотите узнать больше команд для написания батников, Вы можете легко посмотреть их, набрав в командной строке (Пуск — Выполнить – cmd) команду help, но там, конечно же, не все команды, что можно использовать в батниках. Удачи в написание BAT файлов (батников).

date

06.12.2017

user

itpro

directory

Windows 10, Windows 7, Windows XP

comments

комментариев 278

Вчера на курсах подхватил на флешку вирус, который был немедленно детектирован и удален антивирусом на моем домашнем компе. Однако оказалось, что все папки на флешке стали ярлыками. Какое-то время назад я уже сталкивался с такой проблемой, поэтому знаю первое правило, позволяющее предотвратить заражение вашего компьютера: не в коем случае не пытайтесь открыть ярлыки к папкам! (даже если данные на флешке бесценны, и вы хотите немедленно убедиться в том, что они никуда не пропали). Почему не стоит открывать эти ярлыки? Создатели вируса пошли на такую уловку: в свойствах этих ярлыков прописаны две команды:

  1. Первая запускает и устанавливает вирус на Ваш ПК
  2. Вторая открывает интересующую Вас папку

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

Итак, ниже я приведу инструкцию, описывающую что делать, если папки на флеше стали ярлыками

Удаляем исполняемые файлы вируса на USB флешке

Первым делом необходимо избавиться от исполняемых фалов вируса. Это можно сделать с помощью любого антивируса (благо есть куча бесплатных или portable версий, таких как Dr.Web CureIt или Kaspersky Virus Removal Tool), если же его нет – можно попробовать найти и обезвредить вирус вручную. Как же найти файлы вируса, заразившего USB флешку?

В этом примере RECYCLER\e3180321.exe это и есть тот самый вирус. Т.е. файл вируса с именем e3180321.exe находится в папке RECYCLER. Удаляем этот файл, а можно и папку целиком (рекомендую проверить наличие этой папки как на самой зараженной флешке, так и в системных каталогах C:\windows, C:\windows\system32 и в профиле текущего пользователя (о них чуть ниже)).

Так же рекомендую посмотреть исполняемые файлы вируса в следующих каталогах:

  • в Windows 7, 8 и 10 — C:\users\имя_пользователя\appdata\roaming\
  • в Windows XP — C:\Documents and Settings\имя_пользователя\Local Settings\Application Data\

В некоторых случаях такие вирусы не детектируются антивирусами, т.к. их могут создавать в виде .bat/.cmd/.vbs файлов сценариев, которые в принципе не выполняют никаких деструктивных действия на компьютере. Рекомендуем руками проверить флешку на наличие файлов с такими разрешениями (их код можно посмотреть с помощью любого текстового редактора).

Теперь клик по ярлыку не опасен!

Проверка системы на наличие команд автозапуска вируса

В некоторых случаях вирусы прописывают себя в автозапуск системы. Проверьте руками следующие ветки реестра (regedit.exe) на наличие подозрительных записей:

Очистка автозапуска в ветке реестра HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

Удалите все подозрительные записи и незнакомые программ (ничего плохого вы не сделаете, и если даже вы отключите автозагрузку какой-то нужной программы, вы сможете всегда запустить ее вручную после входа в систему).

Другие способы автозапуска программ в системе описаны в статье Управление автозапуском программ в Windows 8.

Восстанавливаем вид каталогов и доступ к папкам

Ручной способ восстановления атрибутов скрытых папок на флешке

Снять атрибуты с папок

В результате все данные на накопителе становятся видимыми.

Скрипт для автоматического снятия атрибутов скрытия с исходных папок и файлов

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

С этого сайта скачайте файл clear_attrib.bat (263 байта) (прямая ссылка) и запустите его с правами администратора. Файл содержит следующий код:

:lbl
cls
set /p disk_flash="Enter flash drive: "
cd /D %disk_flash%:
if %errorlevel%==1 goto lbl
cls
cd /D %disk_flash%:
del *.lnk /q /f
attrib -s -h -r autorun.*
del autorun.* /F
attrib -h -r -s -a /D /S
rd RECYCLER /q /s
explorer.exe %disk_flash%:

При запуске программа просит вас указать имя диска флешки (например, F:), а затем сама удаляет все ярлыки, фалы autorun.*, снимает атрибуты скрытия с каталогов, удаляет папку с вирусом RECYCLER и, наконец, показывает содержимое USB флешки в проводнике.

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

Читайте также: