有没有办法重置第一个批处理文件参数?

时间:2015-01-14 08:45:23

标签: batch-file

我想这样做:

set %1="html"

但它不起作用,我回来了:

  

'" HTML"'不被视为内部或外部命令,   可操作程序或批处理文件。

2 个答案:

答案 0 :(得分:2)

%1不是您使用SET分配的变量。它代表被调用批处理脚本(test.bat arg1call 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