Мне нужно передать идентификатор и пароль в командный файл во время выполнения, а не жестко закодировать их в файл.
Вот как выглядит командная строка:
test.cmd admin P@55w0rd > test-log.txt
batch-file
arguments
Кенг
источник
источник
Ответы:
Еще один полезный совет - использовать
%*
для обозначения «все». Например:Когда вы бежите:
вышеуказанный командный файл будет работать:
У меня может быть немного неправильный синтаксис, но это общая идея.
источник
shift
"выскакивает" аргумент из списка. Предположение OP состояло в том, что он%*
будет выводить только оставшиеся аргументы, но это не сработает, как сказал @Joey.fake-command /u admin /p password admin password foo bar
. На это указал @Joey много лет назад.Вот как я это сделал:
Вот как выглядит команда:
%1
Относится к первому параметру в%2
(а вот хитрая часть) относится ко второму. Таким способом можно передать до 9 параметров.источник
echo %1 %2
и был отброшен простейшим случаем без вырезов и вставки с параметрами a@
и afake-command
с параметрами, думая, что мы получимfake-command.bat
содержимое позже (в этом случае Слишком сложный,fake-command.bat
возможно, придетсяecho %2 %4
игнорировать имена параметров). Неправильно, глупец. TL; DR: не будь таким тупым, как я. 1.echo echo %1 %2 > test.bat
2test word1 word2
.. 3. Прибыль.Если вы хотите разумно обрабатывать пропущенные параметры, вы можете сделать что-то вроде:
источник
Доступ к пакетным параметрам может быть простым с% 1,% 2, ...% 9 или также% *,
но только если содержимое простое.
Для такого сложного содержимого не существует простого способа
"&"^&
, так как невозможно получить доступ к% 1 без возникновения ошибки.Линии расширяются до
И каждая строка терпит неудачу, так как одна из них
&
находится вне кавычек.Это можно решить с помощью чтения из временного файла отмеченной версии параметра.
Хитрость заключается в том, чтобы включить
echo on
и развернуть% 1 послеrem
оператора (работает также с%2 .. %*
).Так что даже
"&"&
можно повторить, не вызывая ошибки, как это отмечено.Но чтобы иметь возможность перенаправить вывод
echo on
, вам нужны два цикла for.Дополнительные символы
* #
используются для обеспечения безопасности содержимого/?
( например , для справкиREM
).Или символ ^ в конце строки может работать как многострочный символ, даже после a
rem
.Затем внимательно читаем вывод параметра rem из файла, но внимательно.
FOR / F должен работать с отложенным расширением, иначе содержимое с "!" будет уничтожен.
После удаления лишних символов
param1
, вы получили его.И для
param1
безопасного использования включите отложенное расширение.источник
&
, ваше решение работает только с простым содержимымtest.bat ^&
и это не удалось . Толькоtest.bat "&"
работает, но это не моя точка зрения. Вы не можете использовать%*
,%1
безопасным способом без РЗМ техники&
а также цитаты"
Да, и просто не забудьте использовать переменные, как
%%1
при использованииif
иfor
и банды.Если вы забудете о двойном
%
, то вы будете подставлять (возможно, нулевые) аргументы командной строки, и вы получите несколько довольно запутанных сообщений об ошибках.источник
if
аfor
?for %%d in (*) do echo %%d
из командной строки:for %d in (*) do echo %d
@for %%2 in (testing) do @echo %%2 %1
в командном файле выдает,testing 1
когда он вызывается с помощью 1 (test 1
).%%1
не имеет доступа к аргументу командной строки, и это также неправильно дляIF
команды. ТолькоFOR
команда (в пакетных файлах) требует двойного процента, но даже тогда она%%1
будет определять параметр FOR и не будет иметь доступа к аргументамНет необходимости усложнять это. Это просто команда% 1% 2 параметров, например,
«Пауза» отображает действия пакетного файла и ждет, пока вы нажмете ЛЮБУЮ клавишу. Сохраните это как xx.bat в папке Windows.
Чтобы использовать его, наберите, например:
Этот пакетный файл заботится обо всех необходимых параметрах, таких как копирование только тех файлов, которые новее, и т. Д. Я использовал его еще до Windows. Если вам нравится видеть имена файлов во время их копирования, не указывайте
Q
параметр.источник
Мой друг недавно спрашивал меня об этой теме, поэтому я подумал, что опубликую, как обрабатывать аргументы командной строки в пакетных файлах.
Как вы увидите, эта техника имеет некоторые накладные расходы, но она делает мои командные файлы очень простыми для понимания и быстрыми в реализации. А также поддерживая следующие структуры:
Тэк в нем , имеющие
:init
,:parse
и:main
функции.источник
Примечание: ЕСЛИ
"%1"==""
вызовет проблемы, если%1
заключено в кавычки.В этом случае вместо этого используйте
IF [%1]==[]
или только в NT 4 (SP6) и более поздних версияхIF "%~1"==""
.источник
Давайте будем простыми.
Вот файл .cmd.
Вот 3 звонка из командной строки.
источник
Это циклически повторяет пакетные параметры (% *), либо они заключены в кавычки, либо нет, а затем отображает каждый параметр.
источник
test.bat *.txt
,test.bat cat^&dog
илиTest.bat /?
Я написал простой скрипт read_params, который может быть вызван как функция (или внешняя
.bat
) и поместит все переменные в текущую среду. Он не будет изменять исходные параметры, потому что функция редактируетсяcall
с копией исходных параметров.Например, с помощью следующей команды:
myscript.bat
сможет использовать переменные после вызова функции:Вот функция:
Ограничения
-force
. Вы можете использовать,-force=true
но я не могу придумать способ разрешить пустые значения, не зная заранее список параметров, которые не будут иметь значения.Изменения
-
перед параметрами.источник
В пакетном файле
И в командной строке передайте аргумент
Выход будет
источник
Для ссылки на переменную set в командной строке вам нужно использовать,
%a%
например:Примечание: это работает для Windows 7 Pro.
источник
Вдохновленный ответом в другом месте @Jon, я разработал более общий алгоритм для извлечения именованных параметров, необязательных значений и переключателей.
Допустим, мы хотим реализовать утилиту
foobar
. Требуется начальная команда. Он имеет необязательный параметр,--foo
который принимает необязательное значение (которое, конечно, не может быть другим параметром); если значение отсутствует, по умолчанию используется значениеdefault
. Он также имеет необязательный параметр,--bar
который принимает требуемое значение. Наконец, он может принимать флаг--baz
без значения. Ох, и эти параметры могут прийти в любом порядке.Другими словами, это выглядит так:
Вот решение:
SETLOCAL
чтобы переменные не попадали в вызывающую среду.SET FOO=
и т. Д. На случай, если кто-то определит их в вызывающей среде.%~1
для удаления кавычек.IF "%ARG%" == ""
и неIF [%ARG%] == []
потому , что[
и]
не играют воли на все со значениями , заканчивающихся в пространстве.SHIFT
внутриIF
блока, текущие аргументы, такие как%~1
, не обновляются, потому что они определяются приIF
разборе. Вы можете использовать%~1
и%~2
внутриIF
блока, но это будет сбивать с толку, потому что у вас естьSHIFT
. Вы можете поставитьSHIFT
в конце блока для ясности, но это может потеряться и / или сбить людей с толку. Так что «захват»%~1
и%~1
вне блока кажется лучшим.IF NOT "%ARG:~0,2%" == "--"
.SHIFT
при использовании одного из параметров.SET FOO=%DEFAULT_FOO%
вызывает сожаление, но альтернативой будет добавлениеIF "%FOO%" == "" SET FOO=%DEFAULT_FOO%
внешнегоIF NOT "%ARG%" == ""
блока. Однако , поскольку это все еще внутриIF "%PARAM%" == "--foo"
блока, то%FOO%
стоимость была бы оценена и установить , прежде чем вы когда - либо вошел в блок, так что вы никогда не обнаружить , что и--foo
параметр присутствует , а также о том , что%FOO%
значение не было.ECHO Missing bar value. 1>&2
отправляет сообщение об ошибке в stderr.ECHO:
или один из вариантов.источник
Создайте новый пакетный файл (пример: openclass.bat) и запишите эту строку в файл:
Затем поместите пакетный файл, скажем, в папку system32, перейдите в свой файл классов Java, щелкните правой кнопкой мыши, Свойства, Открыть с помощью ..., затем найдите свой пакетный файл, выберите его, и это все ...
Меня устраивает.
PS: я не могу найти способ закрыть окно cmd, когда я закрываю класс Java. Теперь...
источник
start /wait java %~n1
Простое решение (хотя вопрос старый)
Test1.bat
CallTest1.bat
вывод
Где YourLocalPath - текущий путь к каталогу.
Для простоты сохраните команду param в переменной и используйте переменную для сравнения.
Его не просто написать, но и просто поддерживать, поэтому, если позже какой-то другой человек или вы прочтете свой сценарий после длительного периода времени, его будет легко понять и поддерживать.
Чтобы написать код в строке: см. Другие ответы.
источник
Obs: Для использования без:
?*&<>
источник
?*&<>