次のエントリ: gccでcygwin1.dllに依存しないようコンパイル [c]
ショートネーム・ロングネーム変換
2006-11-15-1 / カテゴリ: [win][perl] / [permlink]
Win32モジュール使用
あまり高速ではないみたいなので、一度に大量(フォルダ内の数千のファイルとか)を変換するときは、"dir /x"の結果を一度ハッシュに取得して、それを変換テーブルとして変換したほうがはるかに速い。
ただし、cygwin がインストール済み、coreutil パッケージがインストール済み、cygwin に$PATHを通している場合は、/bin/dir.exe を実行してしまってwindowsネイティブの"dir /x"が実行できないので、リネームするなどして実行できないようにしておく必要あり。
ひょっとしたら"あまり高速ではない"のは、数千のファイルがあるフォルダで実行したからかもしんない…が、時間がないので未検証…
use Win32; use Cwd; $pwd = cwd(); print $pwd, "\n"; $pwd = Win32::GetShortPathName($pwd); # ショートネーム(8.3形式)に変換 print $pwd, "\n"; $pwd = Win32::GetLongPathName($pwd); # ロングネームに変換 print $pwd, "\n";結果
C:/Documents and Settings/hmiyazaki/My Documents/prog/perl C:/DOCUME~1/HMIYAZ~1/MYDOCU~1/prog/perl C:/Documents and Settings/hmiyazaki/My Documents/prog/perl
あまり高速ではないみたいなので、一度に大量(フォルダ内の数千のファイルとか)を変換するときは、"dir /x"の結果を一度ハッシュに取得して、それを変換テーブルとして変換したほうがはるかに速い。
ただし、cygwin がインストール済み、coreutil パッケージがインストール済み、cygwin に$PATHを通している場合は、/bin/dir.exe を実行してしまってwindowsネイティブの"dir /x"が実行できないので、リネームするなどして実行できないようにしておく必要あり。
ひょっとしたら"あまり高速ではない"のは、数千のファイルがあるフォルダで実行したからかもしんない…が、時間がないので未検証…
次のエントリ: gccでcygwin1.dllに依存しないようコンパイル [c]
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
最終更新時間: 2013-05-02 16:12