Команды для файла bat: Работа с bat-файлами. — База полезных знаний
Содержание
Использование параметров в командном файле
При вызове командного файла можно вводить данные после команды, на которую командный файл указывает с помощью переменных %1, %2 и т.д. Например, в командном файле HELLO.BAT следующая команда:
@echo hello %1 boy
выведет на экран такую строку:
hello businka boy
если параметр %1 имеет следующее значение:
hello businka
Далее перечислены методы модификации указываемых в командном файле параметров.
Версии параметров командного файла
Параметр | Описание |
%1 | Стандартный параметр |
%~f1 | Преобразование параметра %1 в полностью определенное имя пути к файлу. Если передать только имя файла из текущего каталога, то этот параметр будет дополнен до диска и каталога |
%~d1 | Получение буквы диска из параметра %1 |
%~p1 | Получение пути из параметра %1 |
%~n1 | Получение из параметра %1 имя файла без расширения |
%~x1 | Получение из параметра %1 расширения файла |
%~s1 | Изменение характеристик параметров x и n для работы с коротким именем. Таким образом, параметр %~sn1 можно использовать для получения короткого имени файла, а параметр %~sx1 — для получения короткого расширения |
Далее демонстрируются методы совместного использования некоторых параметров.
Комбинирование параметров командного файла
Параметр | Описание |
%~dp1 | Преобразование параметра %1 в букву диска и путь к файлу |
%~sp1 | Используется для получения короткого пути |
%~nx1 | Преобразование параметра %1 в имя файла и расширение |
Для просмотра всех описанных выше параметров добавьте их в файл TEST.BAT, что может выглядеть следующим образом:
@echo off
echo fully qualified name %~f1
echo drive %~d1
echo filename %~n1
echo file extension %~x1
echo short filename %~sn1
echo short file extension %~sx1
echo drive and directory %~dp1
echo filename and extension %~nx1
Затем откройте файл с длинным именем. Например, выходные данные командного файла, запущенного с файлом c:\temp\пипецкакоедлинноеимяфайла.long, выглядит таким образом:
fully qualified name c:\temp\ пипецкакоедлинноеимяфайла.long
drive C:
path \TEMP\
filename пипецкакоедлинноеимяфайла
file extension .logn
short filename LONGFI~1
short file extension .LON
drive and directory c:\TEMP
filename and extension пипецкакоедлинноеимяфайла.long
Этот метод подходит для второго и последующих параметров. Достаточно вместо значения 1 ввести номер параметра (например, %~f2 для получения полностью определенного имени).
Параметр %0 содержит информацию о самом командном файле (например, %~dp0 предоставляет информацию о диске и пути к командному файлу).
Автоматизация рутинных операций | Мир ПК
При переходе от DOS к Windows пользовательский интерфейс упрощается, причем зачастую отпадает необходимость не только в командной строке, но и в командных (пакетных) файлах. Хотя это и оправдано заложенным в Windows потенциалом, но все же существенно обедняет возможности по управлению ПК.
В Windows ярлык к программе MS-DOS представляет собой Pif-файл, являющийся также программой конфигурации системы. Неопытный пользователь нередко боится прибегать к командным строкам, поскольку сомневается в правильности вводимых команд и опасается что-либо испортить. Кроме того, неверные команды неудобно редактировать — приходится заново их набирать, если, конечно, нет утилиты Doskey. В общем-то несложные команды легко научиться быстро вводить напрямую, но когда необходимо выполнить их целую серию, в частности архивировать, переименовывать, перемещать или копировать группы файлов, а также если такие операции требуются часто, то имеет смысл обратиться к Bat-файлу. Лучше задавать простое имя файла, чтобы при его вводе не возникало ошибок. Система Windows позволяет сделать операции с файлами более наглядными, а безликим в DOS Ваt-файлам дать выразительные ярлыки.
Если в сети, например, более 50 компьютеров и все пользователи, как правило, хорошо знают свои программы и стандартные операции в NC и Windows, то, чтобы изменить свойства ярлыка к одной из общедоступных программ и добавить две вложенные одна в другую папки на каждый из ПК можно сделать следующее. В общедоступную папку поместить ярлык «Ярлык.lnc» с необходимыми свойствами, командный файл «Команда.bat» и ярлык «Команда.pif» к нему со значком, например, в виде самолета (Windows SystemPifmgr.dll). В Bat-файл были включены строки:
DEL C:WINDOWSРАБОЧИ~1ЯРЛЫК.LNC COPY F:ЯРЛЫК.LNC C:WINDOWSРАБОЧИ~1ЯРЛЫК.LNC MD C:DIR1 CD DIR1 MD DIR2
В свойства ярлыка для этого файла также необходимо включить функцию «Закрывать окно по завершении сеанса работы». Теперь процедура замены ярлыка и создания двух вложенных папок на каждой из 50 машин заключается лишь в том, чтобы щелкнуть мышью на значке с изображением самолета в окне общедоступной сетевой папки.
Бывает, подобные задачи нужно решить и для локального ПК. Допустим, до работы над документом следует разархивировать имеющиеся на дискете файлы, а по окончании снова заархивировать. Кроме того, надо определенным образом систематизировать файлы, размещая их по разным папкам. В данном случае набор команд зависит от применяемых архиваторов.
Многие программы допускают управление через командную строку. Причем это оказывается более гибким, чем обычный щелчок мышью на ее значке. В подобном случае и помогут командные файлы и ярлыки. В свойствах ярлыков Windows (Lnc-файлов) тоже есть место для командной строки, указывающей на пакетный файл, запускаемый вместе с соответствующим ярлыком.
Проводник Windows (explorer.exe) можно запускать с параметрами, указанными в свойствах его ярлыка или в командном файле:
/n — открыть проводник в одинарном окне с содержимым текущей папки;
/e — открыть проводник с содержимым текущего диска и развернутой текущей папкой;
/root, — указать папку, содержимое которой требуется посмотреть.
Команда c:windowsexplorer. exe /e, /select, c:dir1file.doc откроет проводник с развернутым каталогом DIR1, а c:windowsexplorer.exe /n, /root, c:dir1file.doc вызовет текстовый редактор (в данном случае — Word) и откроет документ, а если Word не установлен, то появится сообщение об ошибке.
Команды будут выполняться одинаково как из командной строки (сеанс DOS), так и из соответствующего ярлыка. Однако чтобы не возникало проблем из-за неверной кодировки, имена каталогов и файлов следует вводить латиницей. Так, предыдущая команда не реализуется, если в пути будут присутствовать названия папок на русском языке в кодировке Windows.
Бывает, требуется запустить в Windows программу, которая может работать только в среде DOS. В таком случае опять же помогут командные файлы. Например, играть в GTA можно как в Windows, так и в DOS, но когда система перегружена выполняемыми в конкретный момент времени программами, GTA «не пойдет» и придется использовать режим эмуляции DOS. Чтобы ускорить этот процесс, нужно выполнить определенные операции. Сначала следует создать и поместить на Рабочий стол ярлык к сеансу DOS. Потом, открыв свойства ярлыка, добавить имя пакетного файла, который будет управлять запуском программы, и создать этот файл, например, под именем Igra.bat.
C: cd gta gta. bat
Затем, находясь во вкладке «Программа», необходимо нажать кнопку «Дополнительно», включить опции «Не давать программе обнаружить Windows», «Режим MS-DOS», «Выбрать новую конфигурацию MS-DOS» и заполнить поля для файлов Config.sys и Autoexec.bat, например, таким образом:
Config.sys DOS=HIGH, UMB Device=C:WINDOWSHimem.Sys DeviceHigh=C:WINDOWSEMM386.Exe devicehigh=c:windowscommandEbd ramdrive.sys /E 1048 devicehigh=C:doscdoakcdrom.sys /D:mscd001 device=C:doscdtdosm.sys device=C:doscdflashpt.sys device=C:doscdtcdrom.sys /D:mscd001 device=C:doscdaspi2dos.sys device=C:doscdaspi8dos.sys device=C:doscdaspi4dos.sys device=C:doscdaspi8u2.sys device=C:doscdaspicd.sys /D:mscd001 device=C:WINDOWSCOMMAND display.sys con=(ega,,1) Autoexec.bat SET TMP=C:WINDOWSTEMP SET TEMP=C:WINDOWSTEMP SET PROMPT=$p$g SET winbootdir=C:WINDOWS PATH=C:WINDOWS;C:WINDOWS COMMAND;C:DOSCD; C:WINDOWSCOMMANDEbd SET=C:=C: mode con codepage prepare=((866) C:WINDOWSCOMMANDega3.cpi) mode con codepage select=866 keyb ru,,C:WINDOWSCOMMAND keybrd3. sys LH C:WINDOWSCOMMAND MSCDEX.EXE /D:mscd001 /L:H LH C:WINDOWSSmartDrv LH c:dosmousemouse
В каталоге C:DOSCD находится драйвер для дисковода CD-ROM, полученный с загрузочной дискеты, а в C:DOSMouse — DOS-драйвер мыши.
Теперь, закрыв дополнительные настройки программы, можно сменить для нее значок, выбрав его с помощью кнопки «Обзор» из уже имеющихся в системе. Итак, для запуска программы достаточно щелкнуть на ярлыке. По окончании работы нужно в командной строке набрать Exit и нажать , чтобы снова оказаться в Windows.
В отдельных случаях с помощью командного файла можно перезагрузить систему. Так, для DOS-режима есть утилита Restart, исполняемый файл которой (restart.com) имеется в каталоге c:windowscommandebdebd.cab. Для Windows можно использовать программы, написанные на языках VB, Cи++ и др., а можно применить команду RUNDLL32.EXE shell32.dll, SHExit WindowsEx 2. Если такой файл снабдить красочным ярлыком, помещенным на Рабочий стол, то можно перезагружать ПК, не входя в меню «Пуск».
Команда RUNDLL32.EXE shell32.dll,SHExitWindowsEx 1 позволяет лишь завершить работу системы, а RUNDLL32.EXE shell32. dll,SHExitWindowsEx 8 — еще и выключить ПК (при наличии данной функции).
Следует учесть, что некоторые антивирусные программы «не дружат» с подобными Bat-файлами. Например, AVP при настройках «по умолчанию» и запущенном AVP-мониторе не разрешит даже скопировать такой файл. Однако определенные настройки помогут справиться и с этой проблемой.
Для параметров командных файлов в Windows можно вывести диалоговое окно. Так, создадим файл Mydel.bat для удаления указанного нами в дальнейшем файла.
IF exist %1 Del %1
В командной строке после имени командного файла указывается название удаляемого.
Создадим ярлык к Bat-файлу и в свойствах к нему на закладке «Программа» и в поле «Командная строка» добавим знак вопроса в конце строки через пробел. Включим функцию «Закрывать окно по завершении сеанса работы» и так изменим значок, чтобы он соответствовал характеру команды. В результате после двойного щелчка на ярлыке этого файла будет появляться окно «Параметры», куда необходимо ввести полное имя того файла, который мы собираемся удалить. Для завершения работы этой команды следует просто указать ОК. Здесь надо иметь в виду, что удаленный таким образом файл не будет помещен в Корзину и вернуть его, естественно, тоже будет нельзя.
В заключение создадим еще один командный файл Ar.bat, позволяющий выполнять сразу несколько функций:
- проверка дискеты на наличие файлов и их удаления;
- архивирование и отправка на дискету вместе с рисунками в формате .JPG только что написанной статьи, например Bat.doc, которая будет находиться в подкаталоге %1 каталога Maydoc1 (название подкаталога введем в окно параметров). Файлы с другими расширениями останутся в рабочем каталоге без изменений;
- выключение компьютера.
Ar.bat IF exist A:*.* Del A:*.*Открыв свойства Ваt-файла или его ярлыка, введем в конец командной строки через пробел знак вопроса. В корневом каталоге диска С: создадим служебный файл, который в дальнейшем может не раз пригодиться. Это будет текстовый файл с именем Y, причем без расширения, содержащий всего один символ Y. В первой строке Bat-файла символ Y дает утвердительный ответ на запрос команды Del об удалении файлов. Сам файл Ar.bat поместим в корневой каталог диска C: и, открыв свойства ярлыка, укажем C: в поле «Рабочая папка» закладки «Программа». Значок для ярлыка выберем из каталога WindowsSystemShell32.dll. Ярлык перетащим на Рабочий стол, вставим в дисковод дискету со старыми и ненужными файлами и, сохранив документ, закроем Word и щелкнем на ярлыке AR...
Александр Поляк-Брагинский, [email protected]
windows — просмотр содержимого файла .bat через командную строку
спросил
Изменено
1 год, 10 месяцев назад
Просмотрено
3к раз
Я хочу просканировать весь рабочий стол на наличие . bat, а затем просмотреть содержимое файла .bat и удалить файл, если он содержит ipconfig для проекта. Есть ли способ сделать это? Я хотел бы НЕ использовать сторонние инструменты
- windows
- командная строка
- powershell
- пакет
- cmd.exe
10
Приведенный ниже сценарий Powershell получает содержимое файла myfile.bat
, проверьте наличие строки ipconfig
. Если да, файл удаляется.
$file = 'c:\temp\myfile.bat` $a = Get-Content $file | Выберите строку ipconfig if($a.Length -gt 0){Удалить-Элемент $файл}
Чтобы добавить папку, например, на рабочий стол, измените сценарий, как показано ниже. Замените mthecodeexpert
своим настоящим именем пользователя.
$folder = 'c:\users\thecodeexpert\*.bat' $files = Get-ChildItem $folder -файл $ файлы | ForEach-Object{ $a = Select-String -Path $_.Fullname ipconfig; if ($a. Length -gt 0){Remove-Item $_.Fullname}}
5
В продолжение моего коммента…
# Найти файлы по типу (Get-ChildItem -Path "$env:USERPROFILE\Desktop" -Filter '*.bat' -Recurse).FullName # Полученные результаты <# C:\Users\WDAGUtilityAccount\Desktop\SomeBatFile.bat #> # Проверяем запланированное действие над файлом, чтобы найти шаблон строки (Get-ChildItem -Path "$env:USERPROFILE\Desktop" -Filter '*.bat' -Recurse).FullName | ForEach-Object { Если (Select-String -Path $PSItem -Pattern 'ipconfig') {Remove-Item-Path $PSItem-WhatIf} } # Полученные результаты <# Что делать, если: Выполнение операции «Удалить файл» для цели «C:\Users\WDAGUtilityAccount\Desktop\SomeBatFile.bat». #> # Выполните действие с файлом, чтобы найти шаблон строки (Get-ChildItem -Path "$env:USERPROFILE\Desktop" -Filter '*.bat' -Recurse).FullName | ForEach-Object { Если (Select-String -Path $PSItem -Pattern 'ipconfig') {Remove-Item -Path $PSItem -Force -Verbose} } # Полученные результаты <# ПОДРОБНО: Выполнение операции «Удалить файл» для цели «C:\Users\WDAGUtilityAccount\Desktop\SomeBatFile. bat». #> # Подтвердить удаление (Get-ChildItem -Path "$env:USERPROFILE\Desktop" -Filter '*.bat' -Recurse).FullName # Полученные результаты <# Без результатов #>
1
Для поиска всех файлов используйте цикл для
:
@echo off cd /d "%userprofile%\рабочий стол" для %%a в (*.bat) сделать ( введите "%%a"|найдите /i "ipconfig" && echo del "%%a" )
Есть и другой способ (выглядит несколько сложнее, но с точки зрения программиста более элегантен, так как не требует обработки файлов, не содержащих строку поиска). Это будет гораздо быстрее, если файлов много (а я означает а лот г.). Однако вы не заметите преимущества в скорости в папке на рабочем столе.
findstr /m
возвращает не найденные строки, а имена файлов, в которых такие строки были найдены. Поместите для /f
, чтобы захватить эти имена файлов и удалить их:
@echo off for /f "delims=" %%a in ('findstr /im "ipconfig" "%userprofile%\desktop\*. bat"') do del "%%a"
(Примечание: ваш рабочий стол может находиться в другом месте — проверьте это)
9
Вы можете использовать Select-String
в PowerShell, который позволяет вам искать в каталоге ( для определенных типов файлов — расширения ), позволяя вам найти совпадение шаблона в файлах, отфильтрованных по:
$ Paths = Select-String -Path "$env:USERPROFILE\Desktop\*" -Include '*.bat','*.cmd' -Pattern 'ipconfig' | Select-Object -ExpandProperty Путь если ($null -ne $Paths) { foreach ($Path в $Paths){ "В пути к файлу найдено совпадение: $Path" Remove-Item -Path $Path -WhatIf } } еще { «Файл, содержащий шаблон, не найден» }
- По умолчанию командлет Select-String находит первое совпадение в каждой строке и для каждого совпадения отображает имя файла, номер строки и весь текст в строке, содержащей совпадение.
- Он также позволяет использовать сопоставление шаблонов Regex для более сложных задач.
Сохраняя вывод в переменной, мы можем явно выбрать полный путь, ссылаясь на свойство Path
. Наконец, мы можем добавить несколько простых условий if
для оценки нашей переменной и использовать цикл foreach
мы можем перебирать вывод захвата.
- Сохранение вывода в переменной необходимо ( по крайней мере в этом сценарии ), чтобы файл больше не использовался — Спасибо dave_thompson_085 за указание на мою ошибку.
Недостаток использования только этого командлета заключается в том, что он позволяет перечислить только один каталог . К счастью, PowerShell может объединять команды, и все, что вам нужно, это немного изменить код, используя Get-ChildItem
с переключателем -Recurse
для разрешения рекурсии каталога ( папка ).
$Paths = Get-ChildItem -Path "$env:USERPROFILE\Desktop" -Include '*.cmd','*.bat' -Recurse | Select-String -Pattern 'ipconfig' | Select-Object -ExpandProperty Путь если ($null -ne $Paths) { foreach ($Path в $Paths){ "В пути к файлу найдено совпадение: $Path" Remove-Item -Path $Path -WhatIf } } еще { «Файл, содержащий шаблон, не найден» }
В основном та же концепция, поэтому, когда вы будете готовы, удалите -WhatIf
общий параметр , и это позволит удалить найденные файлы, содержащие этот шаблон.
3
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.
пакетных команд MS-DOS
пакетных команд MS-DOS
Пакетные команды MS-DOS
Кнопка Opus или функция горячих клавиш могут быть установлены на MS-DOS Batch.
Режим функции . Функция в этом режиме запускается так, как будто это
.bat пакетный файл, и он может использовать команды MS-DOS, ветвление и
логические инструкции, а также запускать внешние программы, предназначенные только для
запускаться из командной строки. Вы также можете включить обычный внутренний Opus
команды в пакетной функции (обратите внимание, что это может вызвать путаницу, когда
попытка использовать внешние команды, такие как Установить или
Скопируйте , которые конфликтуют с внутренними командами — используйте
@externalonly модификатор, описанный ниже, чтобы исправить это).
На приведенном выше снимке экрана показан пример простой пакетной функции MS-DOS. Этот
использует инструкцию MS-DOS dir для создания списка каталогов
текущей исходной папки. Использование перенаправления >
символ, список каталогов будет сохранен в файле по пути назначения
названный в честь текущей исходной папки.
Разрушение функции,
- Тип установлен на Пакетная функция MS-DOS с помощью
Функция раскрывающегося списка. Это необходимо для использования
dir инструкция — dir не настоящая программа
или команда, это инструкция, которая понимается только командой MS-DOS
устный переводчик. - Первая строка команды cd {sourcepath} устанавливает
текущий каталог пакетного сценария в текущую исходную папку. Это
папка, которая dir создаст список. - Вторая команда вызывает инструкцию dir
(флаг /w включает режим wide ).
> символ перенаправляет вывод команды, а
сочетание внешних
коды управления, следующие за > , подают на выход
имя файла.- {destpath} — путь текущего пункта назначения
каталог - {sourcepath|nopath|noterm} — текущий источник
каталог, без пути или конечного завершения (т. е. имя
каталог) - .txt — расширение выходного файла.
- {destpath} — путь текущего пункта назначения
Когда вы запускаете пакетную функцию MS-DOS, Opus фактически создает временную
пакетный файл на диске и записывает в него ваши инструкции перед его вызовом. Если
вы должны были посмотреть на пакетный файл, созданный вышеуказанной функцией, вы бы увидели
что-то вроде следующего:
@echo off
chcp 1252 > nul
C:
cd "\Users\Jon\Documents"
dir /w > "C:\Test\Documents.txt"
Эти инструкции автоматически записываются в . bat
файл на основе параметров и определения функции.
- @echo off — стандартная инструкция MS-DOS, предотвращающая
каждая команда не будет отображаться в окне подсказки при запуске пакетного файла - chcp 1252 > nul инициализирует кодовую страницу
командная строка (1252 — стандартная кодовая страница Windows). - C: устанавливает текущий диск командной строки — это
генерируется автоматически из инструкции cd {sourcepath}
в определении команды. - cd «\Users\Jon\Documents» устанавливает текущий каталог на
текущий диск — опять же, он генерируется автоматически из компакт-диск
{sourcepath} инструкция. - dir /w > «C:\Test\Documents.txt» отвечает за
создание фактического списка каталогов. В этом случае исходная папка
назывался Documents , а папка назначения была C:\Test
— поэтому имя выходного файла, сгенерированного
{destpath}{sourcepath|nopath|noterm}.