复制一批所有参数

复制一批所有参数

由于批次中的值 %1、%2、%3……等无法修改,因此我需要创建它的副本。

问题:

Q1: How to create a copy in one go?  
    Not like SET cp1=%1, SET cp2=%2, ...etc.

Q2: Can one access the variables in this copy by a for loop, which is similar to
    "FOR %%A IN (%*) DO (...)"

答案1

我想不出很干净使用修改后的参数列表运行第二个程序(或批处理文件,或其他任何程序)的方法,但我相信我已经得到了你想要的 88% 的内容:

@echo off
setlocal enabledelayedexpansion
set i=0
for %%A in (%*) do (
    set /a i+=1
    echo arg !i! is %%A
    set var!i!=%%A     // 这会设置var1=%1var2=%2、 …
                       // 当然,您可以在此时修改这些值。
)
                       // 此时,%i%是参数的数量。
 (其他的东西)
          ︙
for /L %%J in (1, 1, %i%) do (
    call :kludge var%%J          //var%%J是“ var1”或“ var2”或...
    echo arg %%J is !this_value! // 这将遍历原始参数,
                                 // 当然,您也可以在这里修改它们。
)
 (其他的东西)
          ︙
exit /b

:kludge
set this_value=!%1!
exit /b

答案2

正如有人在SO上提到的那样

%* 似乎保存了传递给脚本的所有参数。

它是这里

更新 1:

:loop
@echo %1
shift
if not "%~1"=="" goto loop

您可以将它们全部保存到变量中,例如

SET ARGS_LIST=%*
echo %ARGS_LIST%

答案3

我不确定为什么你需要这样做,但你可以使用以下命令复制参数:

set parms=%*

上述方法在大多数情况下都有效,但在某些情况下会失败。例如,如果参数包含未加引号的特殊字符,该方法就会失败。

*当且仅当所有参数都不包含或?,并且所有包含空格或特殊字符的参数都用引号引起来时,才可以使用 FOR 循环安全地迭代参数。

for %%P in (%parms%) do ...

相关内容