Parameters 批处理分析每个参数
我正在尝试创建一个批处理脚本,该脚本将对给定的每个参数执行相同的操作。例如,将X文件作为参数: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索引…您
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
)