Как передать параметры в bat файл
Все команды и операторы языка являются регистронезависимыми, то есть, команды echo off, ECHO OFF и EcHo oFf являются абсолютно идентичными.
Перенаправление потоков ввода/вывода.
Перенаправление потоков в операционной системе позволяет, например, вывести результат работы программы не на экран, а в файл или на принтер, а также использовать результаты работы одной программы в другой.
Для перенаправления потоков используются специальные символы командной строки:
Основные команды и операторы пакетных файлов.
@<команда>
Оператор @. позволяет не выводить следующую за ним команду на экран. Это аналог оператора ECHO OFF только для одной строки. Часто используется следующим образом в начале многих пакетных файлов:
@ECHO OFF
Это позволяет не выводить и саму запрещающую строку ECHO OFF при выполнении пакетных файлов.
GOTO <метка>
Оператор GOTO осуществляет безусловный переход на метку внутри этого же файла. Метка обозначается следующим образом:
:label
то есть, со знаком двоеточия в начале. Для перехода к такой метке будет служить команда
GOTO label
в любом месте BAT-файла.
CALL <имя bat-файла>
Команда CALL позволяет вызвать один пакетный файл из другого, не прекращая выполнения предыдущего. Пример:
CALL ABC.BAT
То есть, при выполнении команды CALL выполнение текущего пакетного файла прекратится и управление будет передано пакетному файлу с именем ABC.BAT. При использовании команды CALL ABC.BAT, после завершения работы файла ABC.BAT управление будет возвращено на следующую после команды вызова строку.
PAUSE
Команда PAUSE приостанавливает выполнение пакетного файла и выдает на экран приглашение нажать на любую клавишу для продолжения работы. Бывает полезна для того, чтобы дать возможность пользователю прочитать многостраничный текст без использования фильтра MORE.
Используя сочетания этих символов можно изменить вид приглашения DOS по своему вкусу. Не забывайте ставить перед каждым из этих символьв знак доллара.
Если использовать какой-либо текст в строке команды PROMPT, он также будет выведен в соответствующие позиции.
Фильтры в командных файлах.
MORE [диск:][путь]имя_файла MORE < [диск:][путь]имя_файла имя_команды | MORE [диск:][путь][имя_файла]
Последовательный вывод данных по частям размером в один экран. Параметры:
SORT [/R] [/+n] [[диск1:][путь1]имя_файла1] [> [диск2:][путь2]имя_файла2] [команда |] SORT [/R] [/+n] [> [диск2:][путь2]имя_файла2]
Сортировка ввода с выводом результатов в файл, на экран или другое устройство.
Параметры:
Пример:
SORT /R < BOOK1 > REV
Сортирует файл BOOK1 в обратном порядке и записывает результат в файл REV.
Буквы нижнего регистра соответствуют буквам верхнего (a=A, z=Z).
Использование возвращаемых значений.
Основные команды разных версий DOS.
Справочные команды
В Windows, как вы получаете доступ к аргументам, передаваемым при запуске командного файла?
Например, допустим, у меня есть программа с именем hello.bat . Когда я вхожу hello -a в командную строку Windows, как я могу сообщить своей программе, что она -a была передана в качестве аргумента?
Как и другие уже говорил, параметры , передаваемые через командную строку можно получить в пакетных файлах с пометкой %1 в %9 . Есть также два других токена, которые вы можете использовать:
- %0 это исполняемый файл (пакетный файл) имя , как указано в командной строке .
- %* это все параметры, указанные в командной строке - это очень полезно, если вы хотите переслать параметры в другую программу.
Есть также много важных методов, о которых нужно знать в дополнение к простому способу доступа к параметрам.
Проверка, был ли передан параметр
Это делается с помощью конструкций like IF "%
1"=="" , что верно, если и только если никакие аргументы не были переданы вообще. Обратите внимание на символ тильды, который приводит к удалению любых окружающих кавычек из значения %1 ; без тильды вы получите неожиданные результаты, если это значение включает двойные кавычки, включая возможность синтаксических ошибок.
Обработка более 9 аргументов (или просто облегчение жизни)
Если вам нужно получить доступ более чем к 9 аргументам, вы должны использовать команду SHIFT . Эта команда сдвигает значения всех аргументов на одно место, так что %0 принимает значение %1 , %1 принимает значение %2 и т. Д. %9 Принимает значение десятого аргумента (если он есть), который не был доступен ни для одной переменной перед вызовом SHIFT (введите команда SHIFT /? для дополнительных параметров).
SHIFT также полезно, когда вы хотите легко обработать параметры, не требуя, чтобы они были представлены в определенном порядке. Например, скрипт может распознавать флаги -a и -b в любом порядке. Хороший способ разбора командной строки в таких случаях
Эта схема позволяет вам анализировать довольно сложные командные строки, не сходя с ума.
Подстановка параметров партии
Для параметров, представляющих имена файлов, оболочка предоставляет множество функций, связанных с работой с файлами, которые недоступны никаким другим способом. Эта функциональность доступна с конструкциями, которые начинаются с %
Например, чтобы получить размер файла, переданного в качестве аргумента, используйте
Чтобы получить путь к каталогу, из которого был запущен командный файл (очень полезно!), Вы можете использовать
Вы можете просмотреть весь спектр этих возможностей, введя CALL /? в командной строке.
Очень полезной особенностью работы с командными файлами является возможность передавать параметры командной строки и использовать их значения в операциях внутри самого командного файла.
BAT-файл параметр1 параметр2 . параметрN
В самом командном файле первый параметр будет доступен как переменная %1, второй - %2 и т.п. Путь и имя самого командного файла доступно как переменная %0. Для примера создадим командный файл, задачей которого будет выдача на экран значений введенных при его запуске параметров командной строки. Для вывода текста на экран используется команда ECHO текст , однако если "текст" заменить на %0, - то будет выдано имя командного файла, %1 - первый аргумент, заданный в строке запуска, %2 - второй и т.д.
Создаем, например, командный файл params.bat следующего содержания:
echo off echo Это командный файл %0
echo Первый параметр=%1
echo Второй параметр=%2
echo Третий параметр = %3
и запускаем его на выполнение следующей командой:
params.bat FIRST second "two words"
после его выполнения вы поймете, как это работает, и что параметры содержащие пробелы, нужно заключать в двойные кавычки.
Для проверки наличия каких-либо входных параметров, передаваемых командному файлу, можно проверить, является ли значение переменной %1 пустым:
if "%1" EQU "" goto error
.
.
:error
Echo Должен быть задан хотя бы один входной параметр
exit
В командных файлах большого размера трудно обойтись без справочной информации в виде комментариев, для чего используется конструкция
REM пробел текст
Строки, начинающиеся с REM пробел, командным процессором игнорируются.
rem ECHO OFF выключает режим вывода содержания строк командного файла на экран
REM будет выводиться только результат их выполнения.
ECHO OFF
echo Первый параметр=%1
echo Второй параметр=%2
echo Третий параметр = %3
Для доступа из командного файла к параметрам командной строки применяются символы %0, %1, …, %9 или %*.
При необходимости можно использовать более девяти параметров командной строки. Это достигается с помощью команды SHIFT, которая изменяет значения замещаемых параметров с %0 по %9, копируя каждый параметр в предыдущий, то есть значение %1 копируется в %0, значение %2 – в %1 и т.д. Замещаемому параметру %9 присваивается значение параметра, следующего в командной строке за старым значением %9. Если же такой параметр не задан, то новое значение %9 — пустая строка.
Рассмотрим пример. Пусть командный файл my.bat вызван из командной строки следующим образом:
Тогда %0=my.bat, %1=p1, %2=p2, %3=p3, параметры %4 – %9 являются пустыми строками. После выполнения команды SHIFT значения замещаемых параметров изменятся следующим образом: %0=p1, %1=p2, %2=p3, параметры %3 – %9 – пустые строки.
При включении расширенной обработки команд SHIFT поддерживает ключ /n, задающий начало сдвига параметров с номера n, где n может быть числом от 0 до 9.
Например, в следующей команде:
параметр %2 заменяется на %3, %3 на %4 и т.д., а параметры %0 и %1 остаются без изменений.
Команда, обратная SHIFT (обратный сдвиг), отсутствует. После выполнения SHIFT уже нельзя восстановить параметр (%0), который был первым перед сдвигом. Если в командной строке задано больше десяти параметров, то команду SHIFT можно использовать несколько раз.
В командных файлах имеются некоторые возможности синтаксического анализа заменяемых параметров. Для параметра с номером n (%n) допустимы синтаксические конструкции (операторы), представленные в табл. 3.1.
Таблица 3.1. Операторы для заменяемых параметров
Данные синтаксические конструкции можно объединять друг с другом, например:
Мне нужно передать идентификатор и пароль в пакетный файл во время выполнения, а не жестко запрограммировать их в файл.
Вот как выглядит командная строка:
ОТВЕТЫ
Ответ 1
Вот как я это сделал:
Вот как выглядит команда:
%1 применяется к первому параметру, %2 (и здесь сложная часть) применяется ко второму. Таким способом можно передать до 9 параметров.
Ответ 2
Еще один полезный совет - использовать %* для обозначения "все". Например:
Когда вы бежите:
вышеуказанный командный файл будет работать:
У меня может быть немного неправильный синтаксис, но это общая идея.
Ответ 3
Если вы хотите разумно обрабатывать отсутствующие параметры, вы можете сделать что-то вроде:
Ответ 4
Доступ к пакетным параметрам может быть простым с% 1,% 2. % 9 или также% *,
но только если содержание простое.
Для сложного содержимого, такого как "&"^& , простого способа не существует, так как невозможно получить доступ к% 1 без возникновения ошибки.
Линии расширяются до
И каждая строка терпит неудачу, так как одна из & находится вне кавычек.
Это можно решить с помощью чтения из временного файла отмеченной версии параметра.
Хитрость заключается в том, чтобы включить echo on и развернуть% 1 после оператора rem (работает также с %2.. %* ).
Таким образом, даже "&"& может отображаться без ошибки, как отмечается.
Затем читаем параметр rem из файла, но внимательно.
FOR/F должен работать с отложенным расширением, иначе содержимое с "!" будет уничтожен.
После удаления лишних символов в param1 вы его получили.
И для безопасного использования param1 включите отложенное расширение.
Ответ 5
Да, и просто не забудьте использовать переменные типа %%1 при использовании if и for и банды.
Ответ 6
Нет необходимости усложнять его. Это просто команда% 1% 2 параметров, например,
В "паузе" отображается то, что сделал командный файл, и ждет, пока вы нажмете клавишу ANY. Сохраните это как xx.bat в папке Windows.
Чтобы использовать его, введите, например:
Этот командный файл выполняет все необходимые параметры, такие как копирование только новых файлов и т.д. Я использовал его до Windows. Если вам нравится видеть имена файлов, поскольку они копируются, оставьте параметр Q .
Ответ 7
В последнее время друг спрашивал меня об этой теме, поэтому я решил опубликовать, как обрабатывать аргументы командной строки в пакетных файлах.
Этот метод имеет немного накладных расходов, как вы увидите, но это делает мои командные файлы очень легкими для понимания и быстрого внедрения. Помимо поддержки следующих структур:
Суть его имеет функции :init , :parse и :main .
Примечание: IF "%1"=="" вызовет проблемы, если %1 заключен в кавычки.
В этом случае используйте IF [%1]==[] или, только в NT 4 (SP6) и позже, IF "%
Ответ 9
Пусть это просто.
Вот 3 вызова из командной строки.
Ответ 10
Это указывает на параметры партии (% *), либо они цитируются, либо нет, а затем эхо каждого параметра.
Ответ 11
Я написал простой read_params script, который может быть вызван как функция (или внешний .bat ) и поместит все переменные в текущую среду. Он не будет изменять исходные параметры, потому что функция call ed с копией исходных параметров.
Например, с учетом следующей команды:
myscript.bat сможет использовать переменные после вызова функции:
Ограничения
- Невозможно загрузить аргументы без значения, например -force . Вы можете использовать -force=true , но я не могу придумать способ разрешить пустые значения, не зная список параметров загодя, которые не будут иметь значения.
Changelog
- 2/18/2016
- Больше не требуется отсроченное расширение
- Теперь работает с другими аргументами командной строки, ища - перед параметрами.
Ответ 12
Чтобы сослаться на переменную set в командной строке, вам нужно использовать %a% например:
Примечание: это работает для Windows 7 Pro.
Ответ 13
Вдохновленный ответом в другом месте @Jon, я разработал более общий алгоритм для извлечения именованных параметров, необязательных значений и переключателей.
Допустим, мы хотим реализовать утилиту foobar . Требуется начальная команда. Он имеет необязательный параметр --foo который принимает необязательное значение (которое, конечно, не может быть другим параметром); если значение отсутствует, по default по default . Он также имеет необязательный параметр --bar который принимает требуемое значение. Наконец, он может принимать флаг --baz без допустимого значения. Ох, и эти параметры могут прийти в любом порядке.
Другими словами, это выглядит так:
- Используйте SETLOCAL чтобы переменные не SETLOCAL в вызывающую среду.
- Не забудьте инициализировать переменные SET FOO= и т.д., Если кто-то определил их в вызывающей среде.
- Используйте %
1 , не обновляются, потому что они определяются при анализе IF . Вы можете использовать %
2 внутри блока IF , но это может сбить с толку, потому что у вас есть SHIFT . Вы можете поместить SHIFT в конец блока для ясности, но это может потеряться и/или сбить людей с толку. Так что "захват" %
Ответ 14
Создайте новый командный файл (пример: openclass.bat) и напишите эту строку в файле:
Затем поместите пакетный файл, скажем, в папку system32, перейдите в свой файл класса Java, щелкните правой кнопкой мыши, "Свойства", "Открыть с. ", затем найдите пакетный файл, выберите его и. /p >
Это работает для меня.
PS: Я не могу найти способ закрыть окно cmd, когда я закрываю Java-класс. На данный момент.
Ответ 15
Простое решение (хотя вопрос старый)
Где YourLocalPath - это текущий путь к каталогу.
Для простоты сохраните команду param в переменной и используйте переменную для сравнения.
Его не просто написать, но и просто поддерживать, поэтому, если позже какой-то другой человек или вы прочтете свой сценарий через длительный период времени, его будет легко понять и поддерживать.
Чтобы написать код в строке: см. Другие ответы.
Ответ 16
Для использования циклов получить все аргументы и в чистом пакетном режиме:
Ваш код готов сделать что-то с номером аргумента там, где это нужно, например.
Ответ 17
Что если я хочу передать более 9 параметров? Я использую 10 параметров в одном скрипте, но параметр номер 10 отображается как "10"
Ожидаемый результат и id, как обернуть%
Ответ 18
В пакетном файле
% 1 и% 2 возвращают первое и второе значения аргумента соответственно.
Читайте также: