Изменить список параметров в пакетном файле

Я создаю пакетный файл, который принимает аргумент, за которым следует список имен файлов. Я хотел бы передать список имен файлов в другой исполняемый файл в пакетном файле, но я также не хочу передавать первый аргумент.

Как это:

Usage: LaunchTest.bat <config file=""> files ...
</config>

Где LaunchTest.bat - это что-то вроде:

SET CFGFILE=%1
@REM The below does not work, because %* still has the CFGFILE value of %1 in it
@REM I thought I could 'shift', which moves %2, etc., down to %1, etc., but it
@REM does not change the values in %*.
@REM Testing.exe expects only the list of files.
Testing.exe %*

Любая идея, как удалить параметр из% *, или создать список аргументов произвольной длины для передачи команды?

Спасибо, и с Новым годом.

2 ответа

@echo off

echo config file: %~1

setlocal enableDelayedExpansion
set "rest_of_line="
for %%a in (%*) do (
 if !.!==. (
 set "rest_of_line=!rest_of_line! %%a"
 )
 set .=.
)
endlocal && (
 set "rest_of_line=%rest_of_line%"
)
echo %rest_of_line%


@ECHO OFF
SETLOCAL
SET "parms=%*"
CALL SET "parms=%%parms:*%1=%%"
ECHO(%parms:~1%

echo======= Second way


SETLOCAL enabledelayedexpansion
SET "parms=%*"
SET "parms=!parms:*%1=!"
ECHO(%parms:~1%

GOTO :EOF

Два способа - с delayedexpansion и без delayedexpansion.

licensed under cc by-sa 3.0 with attribution.