变量内容替换

变量内容替换

在 Windows 批处理中,我想从 %* 中删除一个或多个特定参数

例如,我想删除--dev通过这样的命令:

python --dev -c "print 'hello world'"

我该如何做呢?

@ECHO OFF
setlocal enabledelayedexpansion

set i=0
for %%x in (%*) do (
  IF NOT %%x == --dev (
     set /A i+=1
     set "args[!i!]=%%~x"
     )
)
:: expecting args to be -c "print 'hellow world'"
echo running: python %args%
python %args%

答案1

看起来您正在尝试在批处理中模拟数组表示法,但这实际上不起作用。您实际上所做的就是创建新变量,例如:

args[0]=--dev

然后您需要用 来调用它%args[0]%

变量内容替换

相反,你可以使用这样的变量替换:

@ECHO OFF

set args=%*
set args=%args:--dev =%

:: expecting args to be -c "print 'hello world'"
echo running: python %args%
python %args%

这样您就不需要延迟扩展或for循环。

for环形

如果您希望保留for循环,那么您可以使用如下方法:

@ECHO OFF
setlocal enabledelayedexpansion

set args=
for %%x in (%*) do (
  IF NOT [%%x] == [--dev] (
     set "args=!args! %%x"
     )
)
:: expecting args to be -c "print 'hello world'"
echo running: python %args%
python %args%

进一步阅读:

相关内容