我想这样做:
set %1="html"
但它不起作用,我回来了:
'" HTML"'不被视为内部或外部命令, 可操作程序或批处理文件。
答案 0 :(得分: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.
答案 1 :(得分: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