Я хотел бы сделать это:Есть ли способ переустановить первый аргумент batchfile?
set %1="html"
Но он не работает, я получаю обратно:
«„HTML“» не распознается как внутренней или внешней командой, исполняемой программой или пакетный файл.
Я хотел бы сделать это:Есть ли способ переустановить первый аргумент batchfile?
set %1="html"
Но он не работает, я получаю обратно:
«„HTML“» не распознается как внутренней или внешней командой, исполняемой программой или пакетный файл.
Взгляните на это:
@ECHO OFF
Setlocal EnableDelayedExpansion
SET 1="html"
echo %1%
echo !1!
PAUSE
Выполнение этого кода с параметром abc
возвратит
abc
html
Очевидно, что вам нужно Setlocal EnableDelayedExpansion
, чтобы иметь возможность "переписать" % 1. Однако это фактически не будет перезаписывать% 1, но сделает его доступным для обновления значение. AFAIK нет возможности переписать его. Существует только один обходной путь я могу думать:
Вызов файла с «HTML» в качестве второго параметра и использовать SHIFT
:
ECHO %1
SHIFT
ECHO %1
Выполнение этого кода Params X и HTML (yourfile.bat X HTML) напечатает:
X
HTML
%1
не является переменной, которую вы назначаете с помощью SET. Он представляет первый аргумент вызываемого пакетного скрипта (test.bat arg1
или call test.bat arg1
) или подпрограммы (call :subroutine arg1
).
Если вы хотите изменить значение% 1, то вы делаете это, когда вы делаете CALL, а не внутри скрипта/подпрограммы CALLed.
Бывают ситуации, когда используется линия set %1=value
. У вас может быть подпрограмма, которая вычисляет значение, а затем сохраняет результат в переменной, имя которой извлекается из первого аргумента в подпрограмму.
Но если подпрограмма вызывается без аргумента, линия расширяется до set =value
, которая генерирует ошибку, которую вы получаете.
Если вы работаете с аргументом %1
и условно хотите «изменить значение» в скрипте, вы должны перенести значение в переменную среды и работать с переменной с этой точки.
Тривиальный пример должен был бы обеспечить значение по умолчанию, если аргумент не передается:
@echo off
setlocal
set "arg1=%~1"
if not defined arg1 set "arg1=default"
REM From now on you never refer to `%1` but use `%arg1%` instead.
Что вы пытаетесь сделать? Ваш код установит переменную, имя которой является первым аргументом процедуры, на «html». Пожалуйста, объясните, что вы намеревались сделать в контексте - покажите нам немного больше своего кода, чем один оператор, в отдельности, и объясните, что вы намерены в качестве параметров, и каков ваш результат - «отредактируйте свой вопрос». – Magoo
Я полагаю, вы должны пересмотреть использование другого решения – jeb