DOSバッチファイルループ処理について



 ◇-?DOS バッチファイルループ処理について-LF8010-03/25-15:45(248)-No.474060
   ┣?!Re:DOS バッチファイルループ処...-KAWAI-03/25-16:49(247)-No.474064
   ┃ ┗?!!Re:DOS バッチファイルループ処...-KAWAI-03/25-16:54(247)-No.474065
   ┗?!実際に作ってみました...-pandora-03/25-20:59(242)-No.474072

▲このページのトップに戻る
474060DOS バッチファイルループ処理についてLF8010 2009/03/25-15:45

メーカー名:富士通
OS名:WindowsXp SP3
パソコン名:FMV-C8230
--
初めまして。よろしくお願いします。
下記のような処理を実現したいのですが、ヒントを頂けませんでしょうか。

1)NETコマンドにてサーバへアクセスします。
2)コマンドが正常であればそのまま次の処理へ進みます。
3)コマンドが異常であれば1)を10回リトライします。
4)3)を10回リトライしても異常であれば、異常である旨を表示します。


1)
net use \\server pass /user:user :ネットワーク接続
net use z: \\server\drive :ドライブ割り当て

2)
正常であればコピー処理します
copy c:\aaaa\*.* z:\aaaa

3)★ここの処理が分かりません。
ネットワークに接続できなければ再度1)をリトライします。
その際、最大10回までリトライする事とします。

4)
10回リトライ後もエラーであれば、
”ネットワーク接続障害。ネットワーク接続を確認”
と表示させます。


以上、よろしくお願いします。

▲このページのトップに戻る
474064Re:DOS バッチファイルループ処理についてKAWAI 2009/03/25-16:49

記事番号474060へのコメント
@echo off
set A=A
:loop0
echo %A%
set A=%A%A
if not %A% == AAAAAAAAAAA goto loop0

10回ループするサンプルを作ってみました。
これの応用で何とか頑張ってくださいね。

▲このページのトップに戻る
474065Re:DOS バッチファイルループ処理についてKAWAI 2009/03/25-16:54

記事番号474064へのコメント
もっと良い方法がありました。setで四則演算ができるのね。

@echo off
set /a A=0
:loop0
set /a A=%A% + 1
echo %A%
if not %A% == 10 goto loop0

▲このページのトップに戻る
474072実際に作ってみましたpandora 2009/03/25-20:59

記事番号474060へのコメント
LF8010さんは No.474060「DOS バッチファイルループ処理について」で書きました。

楽しそうなので、実際に作ってみました
動作は確認済みです

[注意点]
 ・接続対象のコンピュータがネットワーク上に存在しない場合、
  ネットワークログオンエラーを net useでは検出できず
  ネットワークドライブ接続エラーの方で検出する
 ・リトライは、10回も必要なさそう (ダメなときは全然ダメ)


----(ここから)-------------------

@ECHO OFF
rem System Define
SET HOSTNAME=******      ← コンピュータ名
SET USERNAME=******      ← ログオンユーザー名
SET PASSWORD=******      ← パスワード
SET FOLDERPATH=****      ← usr\data といった感じで
SET DRIVE=z:
SET SLEEPTIME=5
SET RETRY=10

SET LOOP=0
:CONNECT
rem Network logon
ECHO Network logon Execute
net use \\%HOSTNAME% %PASSWORD% /user:%USERNAME% >"%TEMP%\TEMP.LOG" 2>&1
FIND /I "エラー" "%TEMP%\TEMP.LOG" >NUL
rem echo ERRORLEVEL=%ERRORLEVEL%
IF ERRORLEVEL 1 (
rem Network drive connect
ECHO Network drive connect Execute
net use %DRIVE% \\%HOSTNAME%\%FOLDERPATH% >"%TEMP%\TEMP.LOG" 2>&1
FIND /I "エラー 85" "%TEMP%\TEMP.LOG" >NUL
IF NOT ERRORLEVEL 1 GOTO :ABEND2
FIND /I "エラー" "%TEMP%\TEMP.LOG" >NUL
rem echo ERRORLEVEL=%ERRORLEVEL%
IF ERRORLEVEL 1 GOTO :SUCCESS
)
SET /A LOOP=LOOP+1
IF /I %LOOP% GTR %RETRY% GOTO :ABEND1
rem sleep
PING localhost -n %SLEEPTIME% >NUL
ECHO.
GOTO :CONNECT

:SUCCESS
ECHO.
ECHO Network connect success

rem
rem My action execute
rem

pause

rem Network drive release
net use %DRIVE% /delete
DEL "%TEMP%\TEMP.LOG" /Q >NUL
GOTO :EOF

:ABEND1
ECHO.
ECHO Network connect error
PAUSE
DEL "%TEMP%\TEMP.LOG" /Q >NUL
GOTO :EOF

:ABEND2
ECHO.
ECHO Network drive connect Fail
ECHO Drive Already in use
PAUSE
DEL "%TEMP%\TEMP.LOG" /Q >NUL
GOTO :EOF

----(ここまで)-------------------

A1.本ページは参考になりましたか? 又はアドバイスがありますか?
解決 参考になった 参考にならなかった アドバイスする

A2.何度目の訪問ですか?
初めて来た   数度目(2〜4) 5回以上来ている   管理人:

A3.何か一言どうぞ(アドレスは書くことができません)

A4.アドレスがあればどうぞ(1つまで)


↑↑↑↑よろしければ押してください↑↑↑↑

何か一言(本ページで参考になったならないを含めて残してあります)
◎:解決 ○:参考になった ×:参考にならなかった !:アドバイスあり

参考回数投稿日時何か一言