dポイントプレゼントキャンペーン実施中!

バッチ処理でファイルの差分バックアップをしていましたが、同期元のパスによって動作しないケースが発生しました。自己検討でも過去レス検索でも解決に至らなかったため、アドバイスをお願いします。

■問題1.無効なパスとしてxcopyが動作しない(Dirは共にNW上のファイルサーバ)
xcopy "%SourceDir%\" "%TargetDir%\" /D /E /C /R /Y
<動作するケースとの変化点>
1.%SourceDire%が長い(ただし255文字は超えていなかった。)
2.%SourceDire%に全角、半角スペースを含んでいたため、""で括った

■問題2.ネットワークドライブに接続することで上記パスの解決を図ろうとしたが動作しなかった
net use %Drive% %Mount%
1.%Mount%は上記の%SourceDir%
2.正常動作する%Mount%(別のファイルサーバ)の場合も %UserPwd% /user:%UserID% を付けると「同じユーザーによる、サーバーまたは共有リソースへの複数のユーザー名での複数の接続は許可されません。」が出るためIDとPWDはコマンド発行せず (net useで見ても接続はされていない。)
3.%Mount%(=%SourceDir%)の指定ディレクトリの階層を変更することによって2種類のエラーが発生する。
「システムエラー53が発生しました。ネットワークパスが見つかりません。」
「システムエラー59が発生しました。予期しないネットワークエラーが発生しました。」

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

A 回答 (3件)

>問題1



ちょっと見逃していました。

>xcopy "%SourceDir%\" "%TargetDir%\" /D /E /C /R /Y

コピー元のパス指定で最後に円マークが付くと問題が出る場合があったと思いました。

xcopy "%SourceDir%" "%TargetDir%\" /D /E /C /R /Y
又は
xcopy "%SourceDir%\*.*" "%TargetDir%\" /D /E /C /R /Y

に変更して確認して見て下さい。
もちろんSourceDir変数の内容の最後にも円マークが付かないように指定してください。

これでだめだとちょっとわからないです。

>問題3

こちらもnet useコマンドに渡すマウント位置のパス指定から最後の円マークを取り除いて下さい。

なお、

>rem set Mount=\\xxxxxxx\

この形式はnet useのコマンドシンタックス上でNGです。
net useコマンド(というかWindowsの制限)ではサーバ全体をネットワークドライブとして割り当てられないはずです。
必ずサーバ名の後に共有名を指定する必要があります。

申し訳ありませんがこれらの対処をしてどのような結果になるか確認してみて下さい。
    • good
    • 0
この回答へのお礼

ありがとうございます!

>問題1
「\」を失くすことで正常動作しました。
以下いずれでも問題なく動作しました。

xcopy "%SourceDir%" "%TargetDir%\" /D /E /C /R /Y
又は
xcopy "%SourceDir%\*.*" "%TargetDir%\" /D /E /C /R /Y


>問題3
こちらもやはり「\」をなくすことで、以下サーバ名の指定以外の全てのパスで正常動作しました。

set Mount=\\xxxxxxx
set Mount=\\xx.x.xx.xxx

いろいろ試したつもりが、ディレトリの表現「\」だったとは・・・。
はまっていて多分いつまでも気づけなかったと思うので、非常に助かりました。

お礼日時:2011/12/05 22:30

>xcopy "%SourceDir%\" "%TargetDir%\" /D /E /C /R /Y


><動作するケースとの変化点>
>1.%SourceDire%が長い(ただし255文字は超えていなかった。)

xcopyコマンドのオプション指定がディレクトリなので、%SourceDire%が255文字ではなく実際にコピーするファイル名までを対象に考えなければならないはずです。
%SourceDire% + 配下のサブディレクトリ + ファイル名が255文字以内という条件になる思いますがそれを越えなくてもエラーとなるのでしょうか?

>2.正常動作する%Mount%(別のファイルサーバ)の場合も %UserPwd% /user:%UserID% を付けると「同じユーザーによる、サーバーまたは共有リソースへの複数のユーザー名での複数の接続は許可されません。」が出るためIDとPWDはコマンド発行せず (net useで見ても接続はされていない。)

エラーの内容そのままです。
例としては、
Server1にShare1とShare2の2つの共有フォルダがある場合
クライアントからServer1のShare1にはUser1で認証し接続、Share2にはUser2で認証し接続ということは出来ません。
(もちろん同じ共有フォルダへの接続も同じです)

おそらく、この場合ログオンユーザーの権限で、%Mount%に示されるサーバーの共有リソースにアクセスしていてセッションが既に張られている可能性が高いように思います。
(net useで接続が無いのはおそらくnet useコマンドで接続をしていないから)
ログオンユーザーで別に接続しているものをやめるか、
net use で共有アクセスする権限を、ログオンユーザーを使用することを前提とするか、
などの対応が必要だと思います。

>3.%Mount%(=%SourceDir%)の指定ディレクトリの階層を変更することによって2種類のエラーが発生する。

これはちょっと内容がわかりにくです。
2.との関連があるのでしょうか?
もう少し具体的になるといいのですが。

この回答への補足

丁寧なご回答ありがとうございます!

1.ご指摘の通り、ファイル名を考慮していませんでした。。しかし、ファイル名を含めて255バイトを超えない範囲でテストしても正常動作しませんでした。→「無効なパスの指定です。」
ちなみにパス(SourceDir)は以下の通りです。(半角、全角混在。)

\\xxxxxxx\xxxx\xxxx\XXXX\xx XXXXX\xx XXXXX(XXXXXXX)\xxxXXX\xxxXX\xxXX\xxxxxxxxx XXXXXXX


2.詳しくは分かりませんが、共有ファイルサーバなので、たぶんログオンユーザでセッションがはられているのでしょうね。。(はられているセッションは全てnet useで見れるものだと思っていました・・・。)
サーバ管理は別部署となるため、アドバイス通り、ログオンユーザーを使用することを前提としようと思います。


3.具体的には、SourceDirは上記に示すパスで、エラーは以下の通りです。階層によって共有レベル(?)が異なるために発生するのでしょうか?

================================================================================
rem NG↓ システム エラー 53 が発生しました。ネットワーク パスが見つかりません。
rem set Mount=\\xxxxxxx\
rem set Mount=\\xxxxxxx\xxxx\
rem set Mount=\\xxxxxxx\xxxx\xxxx\
rem set Mount=\\xxxxxxx\xxxx\xxxx\XXXX\
rem set Mount=\\xx.x.xx.xxx\←IPで記述
rem set Mount=\\xx.x.xx.xxx\xxxx\xxxx\
rem set Mount="\\xxxxxxx\xxxx\xxxx\XXXX\xx XXXXX\xx XXXXX(XXXXXXX)\xxxXXX\xxxXX\xxXX\xxxxxxxxx XXXXXXX\"
rem set Mount="\\xx.x.xx.xxx\xxxx\xxxx\XXXX\xx XXXXX\xx XXXXX(XXXXXXX)\xxxXXX\xxxXX\xxXX\xxxxxxxxx XXXXXXX\"


rem NG↓ システム エラー 59 が発生しました。予期しないネットワーク エラーが発生しました。
rem set Mount=\\xx.x.xx.xx\xxxx\
rem set Mount=\\xx.x.xx.xx\xxxx\xxxx\XXXX\
================================================================================

ちなみに、正常動作するパス(別の共有ファイルサーバ)も階層によって以下のエラーとなります。
(OSレベルではどの階層を呼んでも、普通にエクスプローラで開けます。)

--------------------------------------------------------------------------------
rem OK↓ 正常にマウントできる
rem set Mount=\\yyyyyyyy\yyyyyyy\yyyyy\YYYYYY

rem NG↓ システム エラー 53 が発生しました。ネットワーク パスが見つかりません。
rem set Mount=\\yyyyyyyy\yyyyyyy\yyyyy\
rem set Mount=\\yyyyyyyy\yyyyyyy\
rem set Mount=\\yyyyyyyy\
--------------------------------------------------------------------------------

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

補足日時:2011/12/02 21:29
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2011/12/05 22:27

■問題1.


私が以前、やってしまったのは、
%SourceDire% より %TargetDir% が長かったため、
バックアップ対象データのファイル名やディレクトリ階層により、Windowsで扱えるパスの最大長を超えてしまい、
バックアップが失敗してしまったという事がありました。

%TargetDir% は %SourceDire% と同じ長さか、短い必要があると思います。

この回答への補足

ご回答ありがとうございます!
%TargetDir% は %SourceDire%より短いです。
%TargetDir%・・・33byte
%SourceDir%・・・120byte

補足日時:2011/12/02 21:24
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2011/12/05 22:27

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