オープンソースカンファレンス2013の、USP研究所のセッション(https://www.ospn.jp/osc2013-spring/modules/eguide/event.php?eid=55)に触発されまして。

ということで、書いていきます。
※Windows7 64bitの、組み込みのコマンドだけを使用
まず、ただのリストを作成

1
2
for /L %n in (1,1,16) do @echo %n    

実行結果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

とりえず3と5で割ってみる。
1
2
for /L %n in (1,1,16) do @set /a %n%3 && set/a %n%5 && echo  %n    

実行結果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
11 1
22 2
03 3
14 4
20 5
01 6
12 7
23 8
04 9
10 10
21 11
02 12
13 13
24 14
00 15
11 16

※SET /a って、並べると変な動きするのね・・・1桁目が %3 で、2桁目が %5 の値になってます。
コマンドプロンプトは、_コマンド中に別のコマンドを書けない_ので、もう一工夫しないとFizzとBuzzを分けられません。
(1文字目を切り出して if して、2文字目を切り出して if して、、、みたいなのは非常に面倒)むー・・・っと考えて、3か5で割り切れる値だけを抽出。

1
2
for /L %n in (1,1,16) do @set /a (10-%n%3)/10 && set/a (10-%n%5)/10 && echo  %n    

実行結果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
00 1
00 2
10 3
00 4
01 5
10 6
00 7
00 8
10 9
01 10
00 11
10 12
00 13
00 14
11 15
00 16

そう、

  • 10→Fizz
  • 01→Buzz
  • 11→FizzBuzz
となっています。
仕上げ。
1
2
for /f "usebackq tokens=1,2" %a in (`"for /L %n in (1,1,100) do @set /a (10-%n%3)/10 && set/a (10-%n%5)/10 && echo  %n && echo."`) do @(if %a==11 (echo FizzBuzz) else if %a==10 (echo Fizz) else if %a==01 (echo Buzz) else (echo %b))

実行結果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32

※以下略

完成!
コマンドプロンプトだけで頑張った割には、かなりスッキリした形かと。
Gistにも上げておきました。