
以下のようなバッチプログラムを作っています。
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のネストができないのかなって思ったりするのですが、初プログラムに挑戦中で、わかりません。
質問の仕方すらなっていないと承知していますが、
どうか、よろしくお願いします。
No.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も使えます。
No.2
- 回答日時:
ラベルの後にそのままコマンドを書くことはできません。
次のように行を分けます。:RESULT_01
echo ファイルが存在します。
:RESULT_02
echo %date% %time% %%z ファイルがありません。
ただ、このままだと RESULT_01 のときもファイルがありませんと表示されてしまいますが……。
あと、
if exist OUT_PATH\%%z\*.htm *.xls GOTO...
の *.xls ってなんでしょうか?

No.1
- 回答日時:
まず、バッチ処理でここまでの処理は市内方が良いと思いますが……
for のネスト自体はできます。
ただし、バッチ処理では、複数行にわたる命令はありません。for は、パラメータを変えながら、同じ行にあるコマンドを実行する命令です。
ですから、
for %%z in (.....) do for %%z in (.....) do ....
と1行で書けばOKです。(2番目の for の前に、 do が必要な点に注意)
また、 if には、 else はありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
ExcelVBAのDirでスペース含むフ...
-
ftp処理でmove(移動)を行いたい
-
コマンドプロンプトでファイル...
-
DOSのバッチ作成について‐FORの...
-
バッチファイルで、iniファイル...
-
バッチファイルでファイルを置換
-
フォルダ内の更新日時が一番新...
-
access,vbaでフォルダ内のファ...
-
【Access】エクスポート時のフ...
-
VB6.0 Dir関数について
-
VBA GetAttrについて教えてくだ...
-
コマンドプロンプトでのCSV...
-
[DOS] コピー先に同じファイル...
-
【バッチプログラム】フォルダ...
-
バッチコマンドでファイル名の...
-
バッチ処理で16進数でファイル...
-
word VBA ファイル名 保存
-
ファイル名を変更して移動させ...
-
【DOSバッチ開発】末尾のタブの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトの「%1」と...
-
コマンドプロンプトでファイル...
-
バッチファイルで、iniファイル...
-
ExcelVBAのDirでスペース含むフ...
-
ftp処理でmove(移動)を行いたい
-
[DOS] コピー先に同じファイル...
-
バッチコマンドでファイル名の...
-
フォルダ内の更新日時が一番新...
-
コマンドプロンプトで変数が数...
-
ファイル名に ” を使うと エク...
-
DOSのバッチ作成について‐FORの...
-
access,vbaでフォルダ内のファ...
-
【DOSバッチ開発】末尾のタブの...
-
サブフォルダからファイルをコ...
-
スタートアップのファイルをバ...
-
エクセルVBAを使用してJPGファ...
-
バッチファイルで同一フォルダ...
-
バッチ処理で16進数でファイル...
-
コマンドプロンプトでのCSV...
-
ファイル名の頭5桁と同名のフォ...
おすすめ情報