none
robocopyとファイルパス長について RRS feed

  • 質問

  • Windows Server 2008 R2のrobocopyコマンドとファイルパス長の制限について、
    以下のような仕様であることを認識しております。

    ・NTFSファイルシステムとしての制限は 32,767文字。
    ・Windowsシステムとしての制限は、256バイト。
    ・Robocopyは、Version XP010 であれば、長いパス名(256文字以上)のコピーを
     サポート。(上記NTFSの制限値まで)

    よって、Robocopyでコピーはできますが、それ以外の利用に関してはOSの制限である
    256バイトを受け、例えば、Robocopyでコピー後、ファイル確認をしようとすると、
    できません。(少なくともエクスプローラでは確認できるか不明)
    また、カウント数がrobocopyの実行結果ログとエクスプローラのフォルダプロパティで
    ファイル数が合致しないケースがありました。

    robocopyとOS制限が掛かるファイルパス長について、以下を教えていただけないでしょうか。

    1)robocopyについて
    ・Windows Server 2008 R2に搭載されているモジュールは上記仕様に相当するか。
    ・Robocopyの利用について、上記環境においても(パス+ファイル長が256文字以上)
     コピーしたファイルの使用可能である保証されるのか。


    2)ファイルパス(フルパス)長を超えたファイルについて
    ・ファイルパス(フルパス)長が超えたものもカウントならびに存在を確認することは可能か。(方法はあるのか)
    ・ファイルパス(フルパス)長が超えたものも属性を確認することは可能か。(方法はあるのか)

    • 移動 Robin_Ren 2012年10月3日 22:46 merge forum (移動元:Windows Server 2008 R2 全般)
    2011年10月3日 5:31

回答

  • robocopyとOS制限が掛かるファイルパス長について、以下を教えていただけないでしょうか。

    2)ファイルパス(フルパス)長を超えたファイルについて

    ・ファイルパス(フルパス)長が超えたものもカウントならびに存在を確認することは可能か。(方法はあるのか)
    ・ファイルパス(フルパス)長が超えたものも属性を確認することは可能か。(方法はあるのか)

    直接お役に立つコメントではないかと思いますが、このあたり遠い昔に少し調べて、以下のようなお試しコマンドも作ってみたことがあります。

    lfnutils
    http://www.monyo.com/technical/products/lfnutils/

    このように、直接Unicode対応のAPIを呼び出せば正しく操作することは可能ですし、最近のツールは徐々にUnicode対応してきているはずです。

    ですので、

    Windows Server 2008 R2のrobocopyコマンドとファイルパス長の制限について、
    以下のような仕様であることを認識しております。

    ・NTFSファイルシステムとしての制限は 32,767文字。
    ・Windowsシステムとしての制限は、256バイト。
    ・Robocopyは、Version XP010 であれば、長いパス名(256文字以上)のコピーを
    サポート。(上記NTFSの制限値まで)

    というのは、厳密には正しくありません。OSとしては、Windows NT の頃から、32,767 文字のファイル名に対応しています。

    エクスプローラを含む、各種ツールが、Unicode 対応 API をつかってなかったのが直接の原因です。

     

    ・Robocopyの利用について、上記環境においても(パス+ファイル長が256文字以上)  コピーしたファイルの使用可能である保証されるのか。

    というのも、どちらかというと、256バイトを超えるパス名を適切に扱えるかは、ツールに依存する問題であって、OSとしてどうこうという話ではないです。

    • 回答としてマーク 田中夢 2011年10月12日 6:00
    2011年10月4日 15:46

すべての返信

  • robocopyとOS制限が掛かるファイルパス長について、以下を教えていただけないでしょうか。

    2)ファイルパス(フルパス)長を超えたファイルについて

    ・ファイルパス(フルパス)長が超えたものもカウントならびに存在を確認することは可能か。(方法はあるのか)
    ・ファイルパス(フルパス)長が超えたものも属性を確認することは可能か。(方法はあるのか)

    直接お役に立つコメントではないかと思いますが、このあたり遠い昔に少し調べて、以下のようなお試しコマンドも作ってみたことがあります。

    lfnutils
    http://www.monyo.com/technical/products/lfnutils/

    このように、直接Unicode対応のAPIを呼び出せば正しく操作することは可能ですし、最近のツールは徐々にUnicode対応してきているはずです。

    ですので、

    Windows Server 2008 R2のrobocopyコマンドとファイルパス長の制限について、
    以下のような仕様であることを認識しております。

    ・NTFSファイルシステムとしての制限は 32,767文字。
    ・Windowsシステムとしての制限は、256バイト。
    ・Robocopyは、Version XP010 であれば、長いパス名(256文字以上)のコピーを
    サポート。(上記NTFSの制限値まで)

    というのは、厳密には正しくありません。OSとしては、Windows NT の頃から、32,767 文字のファイル名に対応しています。

    エクスプローラを含む、各種ツールが、Unicode 対応 API をつかってなかったのが直接の原因です。

     

    ・Robocopyの利用について、上記環境においても(パス+ファイル長が256文字以上)  コピーしたファイルの使用可能である保証されるのか。

    というのも、どちらかというと、256バイトを超えるパス名を適切に扱えるかは、ツールに依存する問題であって、OSとしてどうこうという話ではないです。

    • 回答としてマーク 田中夢 2011年10月12日 6:00
    2011年10月4日 15:46
  • こんにちは。
    フォーラム オペレーターの田中夢です。
     
    たかはしもとのぶ  さん
    いつも参考になるアドバイスをいただきありがとうございます。
     
    H_Shibuya さん、質問を投稿されてから少し経ちましたが、
    たかはしもとのぶ さんの投稿はご覧いただけましたでしょうか?
     
    今回、たかはしもとのぶ さんの投稿が参考になるのではないかと思われましたので、
    勝手ながら私のほうで [回答としてマーク] とさせていただきました。
     
     
    また、下記のサイトに参考になるのではないかと思われる情報が記載されていましたので、
    ご紹介させていただきますね。
     
    <参考情報>
    "NTFS ファイル システム上のファイルまたはフォルダを削除できない"
    http://support.microsoft.com/kb/320081/ja
    (「解決方法 5 : ツールを使用して、深いパスをスキャンする 」をご参照ください。)
     
    "CreateFile"
    http://msdn.microsoft.com/ja-jp/library/Cc429198
    (「パラメータ lpFileName」をご参照ください。)
     
     
    今後とも TechNet フォーラムをよろしくお願いいたします。
    ---------------------------------------------------------------------

    日本マイクロソフト株式会社 フォーラム オペレーター 田中夢

    2011年10月12日 6:00