批处理解析每个参数

时间:2012-02-26 21:31:35

标签: parameters batch-file foreach

我正在尝试创建一个批处理脚本,它将对给定的每个参数执行相同的操作。例如,将X文件作为参数:
script.bat "file1.txt" "file2.txt" "file3.txt" "file4.txt" ... "fileX.txt"
将它们重命名为:
"file1.bin" "file2.bin" "file3.bin" "file4.bin" ... "fileX.bin"
重命名只是一个例子,我也需要它来进行更复杂的操作 我想它应该像for each,但我是批处理脚本的新手。

我只是想知道我是否可以增加%1索引......

3 个答案:

答案 0 :(得分:9)

您可以使用SHIFT来移动参数。换句话说,调用shift会将第二个参数设为%1,第三个设置为%2等。

所以你需要这样的东西:

@ECHO OFF
:Loop
IF "%1"=="" GOTO Continue
   ECHO %1
SHIFT
GOTO Loop
:Continue

这将按顺序打印参数,但您可以在循环中执行任何操作。

答案 1 :(得分:4)

您可以执行以下操作,只需添加所需的复杂性:

for %%x in (%*) do (
  echo %%x
)

答案 2 :(得分:1)

我最终得到的是以下内容。我倾向于过度做事,以为我会分享......

在我的批处理文件的顶部,我有以下代码......

<强>用法:

::--------------------------------------------------------
:: Handle parameters
::--------------------------------------------------------
CALL:ChkSwitch bOverwrite "/OVERWRITE" %*
CALL:ChkSwitch bMerge "/MERGED" %*

然后在底部(我通常放置所有功能)......

<强>功能:

::--------------------------------------------------------
:: ChkSwitch Function
::--------------------------------------------------------

:ChkSwitch <bRet> <sSwitch> <sParams> (
    SETLOCAL EnableDelayedExpansion
    SET "switched=0"

    :ChkSwitchLoop
    IF "%~3"=="" GOTO ChkSwitchDone

    IF %~3==%~2 (
        SET "switched=1"
        GOTO ChkSwitchDone
    )

    SHIFT /3
    GOTO ChkSwitchLoop

    :ChkSwitchDone
)
( 
    ENDLOCAL
    SET "%~1=%switched%"
    EXIT /B
)

使用它很简单。你只需调用函数传入一个你想要改变的变量,或者创建下一个传递你正在寻找的开关并最后传递脚本中的所有参数。