2016-05-02 12 views
2

私は現在、バッチスクリプトを学習しようとしています。私は、バッチ内にループや参照があるかどうかを知りたがっています。ループや参照はバッチですか?

C#では

while (true) 
{ Tasks } 

for (int i=0; i<value; i++) 
{ // do ... } 

foreach (var item in collection) 
{ // do ... } 

do 
{ // do ... } 
while (true) 
様ループが存在します10

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...; } 

私は、これらのバッチとどのように構文が見えますか、私はそれを使用することができますどのように存在しないかどうかを知りたいです。

おかげ MC

+1

Goが読み:http://steve-jansen.github.io/guides/windows-batch-scripting/index.html –

+1

そして読みhttp://ss64.com/nt/for.htmlと下の関連リンク'For'ループは、バッチプログラミングの核心です。 – SomethingDark

+0

OP、以下の回答のうち1つが特に役に立った場合は、それを受け入れたものとしてマークしてください。なぜこれが重要であるかの説明については、[このQ/A投稿を見る](http://meta.stackexchange.com/q/5234/275822)を参照してください。 – rojo

答えて

1

これらはすべて、DOSのバッチプログラミングには存在しません。 、詳しくは

FOR %%i IN (list) DO something 

this link

0
:code 
echo your code 
goto code 
3

ループのいくつかの種類があります試してください:あなたは、forループのために、次の構文を使用することができます。ほとんどの場合、forというキーワードが使用されます。詳細については、cmdコンソールにhelp forと入力してください。最も基本的には他の言語でfor (var i=0; i<10; i++)のバッチ相当for /Lある

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

です。

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 
) 

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は最も遅いです。


またifswitchを述べていました。 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をチェックするのではなく、ゼロ/非ゼロステータスを&&または||で確認できます。例:なしswitch...caseありません

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

、しかし、あなたは、いくつかの創造的な処理のために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 
関連する問題