我目前正在尝试学习批处理脚本,我想知道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
答案 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
)
没有while
或do 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
)
为了提高效率,for
和for /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
最慢。
您还提到了if
和switch
。 if
,是的。有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)
答案 2 :(得分:0)
:code
echo your code
goto code