Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parameters 批处理分析每个参数_Parameters_Batch File_Foreach - Fatal编程技术网

Parameters 批处理分析每个参数

Parameters 批处理分析每个参数,parameters,batch-file,foreach,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” 重命名只是一个例子,对于更复杂的操作我也需要它。 我想每个都应该是,但我是批处理脚本的新手 我只是想知道我是否可以增加%1索引…您

我正在尝试创建一个批处理脚本,该脚本将对给定的每个参数执行相同的操作。例如,将X文件作为参数:
script.bat“file1.txt”“file2.txt”“file3.txt”“file4.txt”。。。“fileX.txt”

将它们重命名为:
“file1.bin”“file2.bin”“file3.bin”“file4.bin”。。。“fileX.bin”

重命名只是一个例子,对于更复杂的操作我也需要它。
我想每个都应该是
,但我是批处理脚本的新手


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

您可以使用
SHIFT
向左移动参数。换句话说,调用shift将把第二个参数设置为%1,第三个参数设置为%2,以此类推

所以你需要一些类似的东西:

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

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

我的结论如下。我倾向于做过多的事情,我想我会分享

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

用法:

::--------------------------------------------------------
:: 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
)
然后在底部(我通常放置所有函数的地方)

功能:

::--------------------------------------------------------
:: 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
)
::--------------------------------------------------------
::chk开关功能
::--------------------------------------------------------
:ChkSwitch(
SETLOCAL EnableDelayedExpansion
设置“开关=0”
:ChkSwitchLoop
如果“%~3”==”转到ChkSwitchDone
如果%3==%~2(
设置“切换=1”
转到ChkSwitchDone
)
班次/3
转到ChkSwitchLoop
:ChkSwitchDone
)
( 
端部
设置“%~1=%switched%”
退出/B
)

使用它很简单。您只需调用函数,传入您希望更改或创建的变量,然后下一次传递您要查找的开关,最后传递脚本中的所有参数。

您可以执行类似操作,只需增加所需的复杂性:

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