1

В пакете 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 ответ1

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%

Дальнейшее чтение:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .