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



我想这样做:

set %1="html"

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

"html"不被识别为内部或外部命令, 可操作的程序或批处理文件。

%1不是

使用 SET 分配的变量。它表示被调用的批处理脚本(test.bat arg1call test.bat arg1)或子例程(call :subroutine arg1)的第一个参数。

如果要更改 %1 的值,请在进行调用的位置执行此操作,而不是在调用脚本/例程中执行此操作。

在某些情况下,使用线路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.

看看这个:

@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) 执行此代码将打印:

.html

最新更新