[前の記事]« フォルダを圧縮するコマンド
[次の記事]shutdownで再起動後、任意のユーザー名で自動ログオンしたい »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「FOR .. IN ( ) DO..」索引へ
▲カテゴリー「バッチファイルの起動、引数の取得」索引へ

FORから呼んだサブルーチンが期待通り動作しない

942.
for内でcallしている時に、任意にfor文を終了させる方法
2006年01月18日(水) 02時13分
もじぴったん◆/Q+ZDI4+
●DOS/Windowsのバージョン:WINXP/2000

すみません、以下のようなfor文で上手くエラーに飛ばないので解決策を教えて頂けませんか。

ファイル:aaa.txt 
----中身---- 
111.bat 
222.bat 
・・・ 

-----------------------------------------------
for /f %%i in (aaa.txt) do (call :lb1 %%i) 
goto end_repeat 
:lb1 
set name1=%%1 
if exist %name1% goto err1 
goto :eof 
:end_repeat 
exit /b 0 
:err1 
echo エラー用文言 
exit /b 11 
-----------------------------------------------

<やりたいこと> 
ファイル[aaa.txt]を読み込み、レコードに仕込んだファイルが存在しなければエラーフラグ[err1]より戻り値11で終わりたい。 

<問題点> 
存在しないファイル名を読み込んだとき、一時的に戻り値が11になるが何故か終了せずに[aaa.txt]の終わりまで読み込み続ける。 
例えば[aaa.txt]に登録しているパスが

passA [存在]
passB [存在しない]
passC [存在]

である場合に、動きとして[passB]を読み込んだ
時点で戻り値11を指定してfor文を終了したいのに
そのまま[passC]を読み込んでしまい、戻り値が
0で正常終了してしまう。

<知りたいこと> 
call中に問題が発生した時に、任意の戻り値をもって異常終了としたい。 

こんな感じです。
ご教授よろしくお願いします。
943.
Re:for内でcallしている時に、任意にfor文を終了させる方法
2006年01月18日(水) 09時54分
さな
>-----------------------------------------------
>for /f %%i in (aaa.txt) do (call :lb1 %%i) 
>goto end_repeat 
>:lb1 
>set name1=%%1 
>if exist %name1% goto err1 
>goto :eof 
>:end_repeat 
>exit /b 0 
>:err1 
>echo エラー用文言 
>exit /b 11 
>-----------------------------------------------

4行目、%%1となっているが%1
(%%はバッチファイル内の環境変数を使用するときのみ)
エラー11で戻るようにするのであれば、環境変数にエラーコードのようなものを持たせて、1箇所で終了することをお勧めします。
SET ERRCD = 11
GOTO FIN

:FIN
EXIT /B %ERRCD%
 
 


カテゴリー「FOR .. IN ( ) DO..」索引へ
カテゴリー「バッチファイルの起動、引数の取得」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2006年01月18日 15:37に投稿されたエントリーのページです。

ひとつ前の投稿は「フォルダを圧縮するコマンド」です。

次の投稿は「shutdownで再起動後、任意のユーザー名で自動ログオンしたい」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート