2017-11-20 3 views
0

なぜこのスクリプトは動作しないように見えますが、エラーがどこにあるかを確認するために一時停止しません。バッチファイル:ラベルを使用したバッチプログラミング(入れ子になったループ)は、プログラムが動作しない

私は出力にIhf3112

までIhf0101から始まる誕生日の一連の
set /a month=1 
:m 
if %month% leq 12 
(
    set /a day=1 
    :d 
    if %day% leq 31 
    (
     if %day% leq 9 set birthday=Ihf0%day% 
     if %day% gtr 9 set birthday=Ihf%day% 
     if %month% leq 9 
    (
     set birthday=%birthday%0%month% 
     echo %birthday% 
    ) 
    if %month% gtr 9 
    (
     set birthday=%birthday%%month% 
     echo %birthday% 
    ) 
     set /a day+=1 
     goto :d 
    ) 

     set /a month+=1 
     goto :m 
) 
pause 
+0

[適切な書式設定](https://stackoverflow.com/help/formatting)を使用してください!とにかく、ラベルと 'goto'はブロックの文脈を壊すので、カッコで囲まれたブロックには使用できません... – aschipfl

+0

これは適切な方法で書かれていて、このサイトのエディタはそれらを操作しました..フォーマットは正しいが、シンタックスまたは論理エラー! –

+0

ohhhhhhというのは、基本的にIf:ステートメント内で(:mまたは:d)のようなラベルをブロックコンテキストとして扱うことができないということですか? –

答えて

0

代わりにループfor /L使用このバッチをしたい:

@echo off 
setlocal enabledelayedexpansion 
set "y=2017" 
for /l %%m in (101,1,112) do (
    set "m=%%m" 
    for /l %%d in (101,1,131) do (
    set "d=%%d" 
    xcopy /d:!m:~1!-!d:~1!-%y% /l . .. >nul 2>&1 && echo lhf!d:~1!!m:~1! 
) 
) 

2つの少しトリック:
- 101から131までをカウントし、最後の2桁を使用すると、常に数字が0より小さい数字の先頭に0が付きます。
- xcopyを使用して、日付が実際に存在するかどうかを確認します(here )(うるう年の適切な計算の年を知るために必要)

関連する問題