在 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%
进一步阅读: