批处理解析每个参数。

8
我正在尝试创建一个批处理脚本,它可以针对每个参数执行相同的操作。例如,给出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个回答

12
你可以使用SHIFT来将参数向左移动。换句话说,调用shift会将第二个参数放到%1,第三个参数放到%2等等。
所以你需要像这样做:
@ECHO OFF
:Loop
IF "%1"=="" GOTO Continue
   ECHO %1
SHIFT
GOTO Loop
:Continue

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


9
你可以像这样做,只需添加你想要的复杂性:
for %%x in (%*) do (
  echo %%x
)

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
)

使用它非常简单。只需调用该函数,传入您希望更改或创建的变量,然后传递您要查找的开关,最后传递来自脚本的所有参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接