• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:バッチ処理でファイルの差分バックアップ)

バッチ処理でファイルの差分バックアップに関する問題解決方法

このQ&Aのポイント
  • バッチ処理でファイルの差分バックアップを行っている際に、特定のパスでは動作しなかった問題が発生しました。パスの文字数やスペースの有無によっても影響を受けることが判明しました。
  • また、ネットワークドライブに接続しても問題を解決できなかったことも確認されました。特定のパスや階層の指定によってシステムエラーが発生し、正常にバックアップが行われませんでした。
  • 解決策を見つけるために様々な方法を試しましたが、まだ解決できていません。アドバイスやお知恵をいただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • maesen
  • ベストアンサー率81% (646/790)
回答No.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の制限)ではサーバ全体をネットワークドライブとして割り当てられないはずです。 必ずサーバ名の後に共有名を指定する必要があります。 申し訳ありませんがこれらの対処をしてどのような結果になるか確認してみて下さい。

elemecha
質問者

お礼

ありがとうございます! >問題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 いろいろ試したつもりが、ディレトリの表現「\」だったとは・・・。 はまっていて多分いつまでも気づけなかったと思うので、非常に助かりました。

その他の回答 (2)

  • maesen
  • ベストアンサー率81% (646/790)
回答No.2

>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.との関連があるのでしょうか? もう少し具体的になるといいのですが。

elemecha
質問者

お礼

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

elemecha
質問者

補足

丁寧なご回答ありがとうございます! 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\ -------------------------------------------------------------------------------- 以上、よろしくお願いします。

  • ymamdaQ
  • ベストアンサー率23% (7/30)
回答No.1

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

elemecha
質問者

お礼

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

elemecha
質問者

補足

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

関連するQ&A