2009-01-04
長いファイル名を変更する
Windows |
Windowsでは、パス文字列の長さが260文字を超えてしまうと、Explorerだろうがコマンドプロンプトだろうが「ファイル名または拡張子が長すぎます。」と言われて移動や削除ができなくなってしまうらしい(Vistaでも直ってない)。これの対処方法。
親フォルダの名前を短くする
Microsoftのページ にある解決方法。でも、そもそも C:\a\b\c\d\e\f\g\長いファイル名 のように切り詰められない場合は?
SUBSTコマンドを使う
フォルダに対してドライブ文字を割り当てるSUBSTコマンドを使って、極限まで短くする。たとえば上のような場合なら、コマンドプロンプトから
subst X: C:\a\b\c\d\e\f\g
とすると C:\a\b\c\d\e\f\g フォルダに X:\ でアクセスできるようになるので、エクスプローラでXドライブからアクセスしたり、コマンドプロンプトから
X: ren 長いファイル名 短いファイル名
のようにすればファイル名を短く変更できる。(パス全体ではなく)ファイル名自体はどうやっても255文字くらいまでしか付けられないので、この方法で必ず対処できるはず。
Win32 APIを直接叩く
たとえば、Visual Studio C# の Express 版をダウンロードして以下のようなコンソールプログラムを作成する。
using System; using System.Runtime.InteropServices; namespace MoveFile { class Program { [DllImport("kernel32.dll", EntryPoint="MoveFileW", CharSet=CharSet.Unicode, SetLastError=true, ExactSpelling=true, CallingConvention=CallingConvention.StdCall)] private extern static bool MoveFile(String from, String to); static void Main(string[] args) { MoveFile(args[0], args[1]); } } }
これをビルドしてできる MoveFile.exe を使って
> MoveFile.exe "\\?\C:\a\b\c\d\e\f\g\長いファイル名" "短いファイル名"
のように変更する。
MSDNのMoveFileのドキュメントによると、長いパス名を扱うには先頭に「\\?\」のようなプレフィックスを付ける必要があるらしい。初めて知った。
このプレフィックスさえつければ普通に変更できるのかな? と思って ren コマンドの引数や、JScriptの MoveFile とかで試してみたけどダメだった。手軽な方法が無くて残念。
トラックバック - http://d.hatena.ne.jp/halflife/20090104/1231061283
リンク元
- 7 http://search.yahoo.co.jp/search?p=ファイル名 長すぎ 削除&search.x=1&fr=top_ga1&tid=top_ga1&ei=UTF-8
- 5 http://www.google.co.jp/search?hl=ja&q=ファイル名 長い&lr=
- 5 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4SUNA_jaJP295JP295&q=日付+バリデーション+java
- 4 http://d.hatena.ne.jp/
- 3 http://www.google.co.jp/search?hl=ja&q=長いファイル名を短くする&lr=&aq=2&oq=ながいふぁ
- 3 http://www.google.co.jp/search?q=長いファイル名&hl=ja&lr=lang_ja&sa=2
- 3 http://www.google.co.jp/search?q=nunit+log4net&sourceid=navclient-ff&ie=UTF-8&rlz=1B3GGGL_jaJP249JP249
- 3 http://www.google.com/search?hl=ja&rls=com.microsoft:ja:IE-SearchBox&rlz=1I7GGLJ&q=長いファイル名変更&lr=
- 2 http://d.hatena.ne.jp/egggarden/20090104/1231068036
- 2 http://k.hatena.ne.jp/keywordblog/log4net
2009年2月23日から日記を更新していらっしゃらないようなので、私のこのコメントを読んで頂けるかどうか分かりませんが、
感謝の気持ちを伝えたくてコメントさせて頂きました。読んで頂けたらいいなと思います。ありがとうございました。