是否有批处理循环或引用?

时间:2016-05-02 19:06:05

标签: loops batch-file syntax

我目前正在尝试学习批处理脚本,我想知道Batch中是否有任何循环或引用(例如下面的例子)。

在C#中有像

这样的循环
foreach (var item in collection)
{ // do ... }

do
{ // do ... }
while (true)

if (true)
{ // do ... }
else
{ // do else ... }

try
{ // try to do ... }
catch (Exception e)
{ // do if try fails ... }
finally
{ // do anyways ... }

switch (value)
{ case 1: /* do */ break; case...; }

{{1}}

{{1}}

我想知道Batch中是否存在这些,以及语法的外观或如何使用它。

由于 MC

3 个答案:

答案 0 :(得分:3)

有几种类型的循环。大多数涉及for关键字。在cmd控制台中键入help for以获取更多信息。最基本的是

for %%x in (tokenset) do (
    rem // act on each token
)

其他语言中等效的for (var i=0; i<10; i++)批量为for /L

for /L %%x in (0,1,10) do (
    rem // 0..10
)

没有whiledo until循环,但有goto label。例如:

set x=0
:loop
set /a x+=1
if %x% leq 9 goto loop

对于循环文件内容或命令输出,有for /F

for /f "usebackq delims=" %%x in ("filename.txt") do (
    rem // act on each line of text
)

for /f "delims=" %%x in ('command') do (
    rem // act on each line of output
)

为了提高效率,forfor /L最快。但是如果你使用for /L突破goto,脚本将继续循环遍历循环直到完成,但跳过其中的命令。如果您使用for /L %%I in (0,1,1000000)并使用goto尝试在几次迭代后突破它,则会影响性能。例如:

for /L %%I in (0,1,10) do (
    echo %%I
)

比...快得多。

for /L %%I in (0,1,1000000) do (
    echo %%I
    if %%I gtr 9 goto next
    rem // continues iterating 1000001 times, but only echoes 11 lines.
)
:next

for /F稍慢,goto最慢。

您还提到了ifswitchif,是的。有if。从cmd控制台中键入help if以获取完整详细信息。例子:

set /a "var = 5 << 2"
if %var% gtr 30 echo What a big number!

set "var=foo"

if /I "%var%"=="Foo" echo Case insensitive match worked with /I

还有conditional execution,它非常方便。您可以使用if errorlevel n&&检查零/非零状态,而不是检查||。例如:

(echo "The quick brown fox") | findstr /i "brown" >NUL && (
    echo Contained the word "brown".
) || (
    echo Didn't contain the word "brown".
)

没有switch...case,但您可以使用goto进行广告素材处理。

@echo off & setlocal

:begin
echo 1: option 1
echo 2: option 2
echo 3: option 3
set /P "opt=Enter a selection: "

for %%I in (1 2 3) do if "%opt%"=="%%I" goto run%%I
echo %opt%: invalid choice.
pause
goto begin

:run1
echo Do stuff!
goto begin

:run2
echo Do something else.
goto begin

:run3
echo Bye!
exit /b

答案 1 :(得分:1)

这些都不存在于DOS批处理编程中。您可以使用以下语法进行for循环:

FOR %%i IN (list) DO something

如需更多信息,请尝试this link

答案 2 :(得分:0)

:code
echo your code
goto code