お世話になります。
バッチファイルを作成して、サーバー間でファイルのコピーを行おうと思ってます。
サーバーA:win2003server standerdEditon
サーバーB:win2003server standerdEditon
サーバーC:win2003server R2 standerdEditon(ServicePack1)
A、Bからnet useコマンドでCをマウントしてます
A→Cのコピーは大丈夫なのですが、
B→Cでは頻繁にnet useコマンドで失敗します。
サーバーBのバッチファイル
if not exist P:\ net use P: \\serverC\test >> log.txt
if %ERRORLEVEL% neq 0 echo エラー発生 ERRORLEVEL=%ERRORLEVEL% >> log.txt &goto END
if ERRORLEVEL 0 echo 正常終了 >> log.txt
のようにしているのですが、エラーなのに、
「エラー発生」がログに出ずに終了してます。
「正常終了」も
「エラー発生」もログに出ないということは、if文で評価されてないように
思うのですが、&gotoで次の処理を飛ばしているので、終了のログは出てます。
説明が不足しておりましたら追加させていただきますので、
なぜこの現象が発生するのかお知恵をお貸しいただければ幸いです。
よろしくお願いします。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
こんにちは。
> サーバーBのバッチファイル
> if not exist P:\ net use P: \\serverC\test >> log.txt
> if %ERRORLEVEL% neq 0 echo エラー発生 ERRORLEVEL=%ERRORLEVEL% >> log.txt &goto END
> if ERRORLEVEL 0 echo 正常終了 >> log.txt
> のようにしているのですが、エラーなのに、
> 「エラー発生」がログに出ずに終了してます。
> 「正常終了」も
> 「エラー発生」もログに出ないということは、if文で評価されてないように
> 思うのですが、&gotoで次の処理を飛ばしているので、終了のログは出てます。
> 説明が不足しておりましたら追加させていただきますので、
> なぜこの現象が発生するのかお知恵をお貸しいただければ幸いです。
この現象というのは次のどちらの事を言っているのでしょう?
(1)B→Cでは頻繁にnet useコマンドで失敗すること
(2)「正常終了」も 「エラー発生」もログに出ないということ
(1)ならばサーバの設定なども関係してくるのでよくわかりませんが、(2)が疑問ならば、後で掲載された全体のバッチを見る限り、
echo: << ネットワーク接続 >> >> %LOG%
if not exist P:\ net use P: \\serverC\test ADMIN /USER:admin >> %LOG%
if %ERRORLEVEL% neq 0 echo エラー発生 ERRORLEVEL=%ERRORLEVEL% > %LOG_ERR% &goto END
if ERRORLEVEL 0 echo 正常終了 >> %LOG%
エラーのログ(error.txt)と、正常のログ(log.txt)を分けているからではないでしょうか?
ありがとうございます。
そうですね、ログが出ないのは違うファイルに吐くようにしてるからです。
ご指摘ありがとうございます。
質問的には(1)と(2)両方と考えておりました。
ありがとうござました。
No.4
- 回答日時:
サーバーBのバッチファイルは全部掲載されていませんよね。
(:END のラベルがない)掲載されている部分全体が、if () else ( ) や for () などの複文内に含まれていませんか?その場合、 %ERRORLEVEL% が先に評価されてしまっている可能性があります。
また net use コマンドのエラー出力も log.txt に記録したいのなら、
if not exist P:\ net use P: \\serverC\test >> log.txt 2>&1
と記載する必要があります。
差し支えなければ、バッチ全体を掲載されてはいかがでしょうか。
この回答への補足
皆様ありがとうございます。
バッチファイルの中身を載せます。
serverBにあるバッチファイルですが、serverAのものと同じです。
流れ的には、クライアントからrcmd.exeでこのバッチをキックするというものです。
よろしくお願いします。
serverAからserverCは失敗することはあまりないですが、
serverBからserverCでは、net useのところで落ちてるみたいで、
<< ネットワーク接続 >>
だけがログに出でて、
<< ネットワーク切断 >>
のログが出て、終了のログが出ます。
------------------------
@echo off
set HOME=F:\Batch
set LOG=%HOME%\log.txt
set LOG_ERR=%HOME%\error.txt
echo: << 開始日時 >> >> %LOG%
date /t >> %LOG%
time /t >> %LOG%
:ネットワーク接続
echo: >> %LOG%
echo: << ネットワーク接続 >> >> %LOG%
if not exist P:\ net use P: \\serverC\test ADMIN /USER:admin >> %LOG%
if %ERRORLEVEL% neq 0 echo エラー発生 ERRORLEVEL=%ERRORLEVEL% > %LOG_ERR% &goto END
if ERRORLEVEL 0 echo 正常終了 >> %LOG%
:コピー
echo: >> %LOG%
echo: << コピー処理 >> >> %LOG%
xcopy /d /e /h /r /y "P:\*.*" "D:\copy\*.*" >> %LOG%
if %ERRORLEVEL% neq 0 echo コピーでエラー発生 ERRORLEVEL=%ERRORLEVEL% > %LOG_ERR% &goto END
if ERRORLEVEL 0 echo 正常終了 >> %LOG%
:END
echo: >> %LOG%
echo: << ネットワーク切断 >> >> %LOG%
net use P: /delete >> %LOG%
if %ERRORLEVEL% neq 0 echo 切断でエラー発生 ERRORLEVEL=%ERRORLEVEL% > %LOG_ERR% &goto END2
if ERRORLEVEL 0 echo 正常終了 >> %LOG%
:END2
echo: >> %LOG%
echo: << 終了日時 >> >> %LOG%
date /t >> %LOG%
time /t >> %LOG%
echo: >> %LOG%
No.3
- 回答日時:
訂正
だれかが「subst P: P:\temp」なんてコマンドを実行してたら
は
だれかが「subst P: C:\temp」なんてコマンドを実行してたら
の間違い
No.2
- 回答日時:
subst P: /D >> log.txt
net use P: /DELETE >> log.txt
net use P: \\serverC\test >> log.txt
if %ERRORLEVEL% neq 0 echo エラー発生 ERRORLEVEL=%ERRORLEVEL% >> log.txt &goto END
if ERRORLEVEL 0 echo 正常終了 >> log.txt
に変えてみましょう。
それに「P:が存在しているからと言って、それが目的のサーバーではない可能性」があるので「P:があろうがなかろうが、P:を(substとnet useの双方で)開放し、P:は常に割り当て直す」のが安全です。
質問者さんの元のバッチでは、だれかが「subst P: P:\temp」なんてコマンドを実行してたら、二進も三進も行かなくなります。
No.1
- 回答日時:
なによりも、どのような処理をしたいのか、質問文に書いた方がいいですよ。
ファイルが重複したときの処理をどうしたいのか、質問文内に書かれていないので、こちらは想像するしかありません。
この内容だと、文法チェック依頼だと思います。
それから、いままで、どのような切り分けをしたのかも書いて下さい。
例
各処理ごとにPauseを入れてみて確認した
全ての行にログ出力処理を追加し、どこでフリーズしているか確認した
各if文を上下入れ替えても、同じ処理になってしまう
elseによる分岐を明記した場合でも同じ
「goto END」に相当するラベルが書かれていないが、書いた場合も同じ(ラベルが無いのが謎ですが)
パイプ処理に「|」を使った場合でも変化ないのかどうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- その他(プログラミング・Web制作) mariadbでのエラー 1 2022/11/15 12:31
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- サーバー 「内部サーバーエラー サーバーで内部エラーまたは構成ミスが発生したため、リクエストを完了できませんで 1 2023/07/30 21:54
- UNIX・Linux linuxサーバーのキャッシュをクリアするコマンドを実行したい。 5 2023/01/24 14:52
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- WordPress(ワードプレス) ワードプレスのエラー ログイン画面が表示できない 1 2022/11/05 09:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでFormat がうまく使えない
-
NET USE コマンドでエ...
-
POV-Ray についての質問です!
-
bcpadがうまく実行できないので...
-
Excel ファイルに保存すると実...
-
Debug Assertion Failed?
-
EXCELを開くとエラーがでます。
-
iphone同期時にエラーが出ます
-
Web.Config 構成ファイルのエラー
-
ドキュメントホルダーを選択す...
-
Eclipseでのエラー検出の機能に...
-
PowerPoint(.pptx)ファイルをPD...
-
vbaでファイルを開くパス名に変...
-
jw cadの名前をつけて保存・・...
-
メモ帳を保存せずに誤って閉じ...
-
ショートカットファイルが開け...
-
Googleドライブにインターネッ...
-
Thunderbirdのプロファイルが読...
-
DVD-Rなのに再書き込みや削除が...
-
勝手にショートカットのリンク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Debug Assertion Failed?
-
VBAでFormat がうまく使えない
-
NET USE コマンドでエ...
-
Excel ファイルに保存すると実...
-
シェルスクリプトの実行エラー...
-
Web.Config 構成ファイルのエラー
-
ホームページビルダーの”全体の...
-
エラーコード 70 「書き込み...
-
vbaでファイルを開くパス名に変...
-
C# HttpWebRequestのエラーにつ...
-
ACCESS VBAのOpenForm書き方
-
VBAで印刷するとエラーになって...
-
POV-Ray についての質問です!
-
不明なソフトウェア例外(0xe06...
-
Access ADOで文字列を日付型へi...
-
WNetAddConnection*()の使い方
-
LTspiceのTime Stepエラーについて
-
bcpadがうまく実行できないので...
-
xmlドキュメントから別拡張子で...
-
VB2010ビルドできるが配...
おすすめ情報