2015-01-14 2 views
0

Я хотел бы сделать это:Есть ли способ переустановить первый аргумент batchfile?

set %1="html" 

Но он не работает, я получаю обратно:

«„HTML“» не распознается как внутренней или внешней командой, исполняемой программой или пакетный файл.

+0

Что вы пытаетесь сделать? Ваш код установит переменную, имя которой является первым аргументом процедуры, на «html». Пожалуйста, объясните, что вы намеревались сделать в контексте - покажите нам немного больше своего кода, чем один оператор, в отдельности, и объясните, что вы намерены в качестве параметров, и каков ваш результат - «отредактируйте свой вопрос». – Magoo

+0

Я полагаю, вы должны пересмотреть использование другого решения – jeb

ответ

1

Взгляните на это:

@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

2

%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. 
Смежные вопросы