アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のようなバッチプログラムを作っています。

echo %date% %time% 開始しました。

rem レポートに関する環境変数
set rep01=01_A表
set rep02=02_B表
set rep03=03_C表
set rep04=04_D表
set rep05=05_E表

for %%d in (dora emon) do (
rem ディレクトリに関する環境変数
set OUT_PATH=d:\%%d\o_files
set DOWN_PATH=d:\%%d\dl_files
set PUB_PATH=d:\%%d\p_files
set BAK_PATH=d:\%%d\b_files
set LOG_PATH=d:\%%d\batch_log
for %%z in (0001 0002 0003 0004 0005) do (
for %%r in (%rep01% %rep02% %rep03% %rep04% %rep05%) do (
if exist OUT_PATH\%%z\*.htm *.xls GOTO RESULT_01 else GOTO RESULT_02

:RESULT_01 echo ファイルが存在します。

:RESULT_02 echo %date% %time% %%z ファイルがありません。)))

ここまでで、コマンドの構造が誤っています。
とエラーがでます。
FORのネストができないのかなって思ったりするのですが、初プログラムに挑戦中で、わかりません。
質問の仕方すらなっていないと承知していますが、
どうか、よろしくお願いします。

A 回答 (3件)

初プログラムにしては難しすぎますね。


Windows2000,XP,2003だとして回答します、
forのネストは出来ますが、for do の後の括弧内でgoto命令は使えません。正確には、gotoしたとたん、forループから抜け出たと解釈されます。
例えば下記のようにしてください。

for %%z in (0001 0002 0003 0004 0005) do (
 for %%r in (%rep01% %rep02% %rep03% %rep04% %rep05%) do (
  if exist OUT_PATH\%%z\*.htm *.xls (
   echo ファイルが存在します。
  ) else (
   echo %date% %time% %%z ファイルがありません。)))

ただし、これでも
if exist OUT_PATH\%%z\*.htm *.xls
のところが意味不明の構文なのでエラーになります。「該当ディレクトリに*.htmまたは*.xlsのファイルがあれば」という判断をしたいなら一つのif文では出来ません。

for %%z in (...) do (
 for %%r in (...) do call :sub %%z
)
次の処理
goto :eof
:sub
if exist %OUT_PATH%\%1\*.htm echo ファイルが存在します&goto :eof
if exist %OUT_PATH%\%1\*.xls echo ファイルが存在します&goto :eof
echo ファイルがありません
goto :eof

のようにサブルーチンに飛ばして処理します。サブルーチンの中ならgotoも使えます。
    • good
    • 0

ラベルの後にそのままコマンドを書くことはできません。

次のように行を分けます。

:RESULT_01
echo ファイルが存在します。

:RESULT_02
echo %date% %time% %%z ファイルがありません。


ただ、このままだと RESULT_01 のときもファイルがありませんと表示されてしまいますが……。

あと、
if exist OUT_PATH\%%z\*.htm *.xls GOTO...
の *.xls ってなんでしょうか?
    • good
    • 1

まず、バッチ処理でここまでの処理は市内方が良いと思いますが……



for のネスト自体はできます。
ただし、バッチ処理では、複数行にわたる命令はありません。for は、パラメータを変えながら、同じ行にあるコマンドを実行する命令です。

ですから、
for %%z in (.....) do for %%z in (.....) do ....
と1行で書けばOKです。(2番目の for の前に、 do が必要な点に注意)

また、 if には、 else はありません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A