2006-11 / 2006-11-15

前のエントリ: 特定条件のセル数をカウント [excel]
次のエントリ: gccでcygwin1.dllに依存しないようコンパイル [c]

ショートネーム・ロングネーム変換
2006-11-15-1 / カテゴリ: [win][perl] / [permlink]

Win32モジュール使用

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"が実行できないので、リネームするなどして実行できないようにしておく必要あり。

ひょっとしたら"あまり高速ではない"のは、数千のファイルがあるフォルダで実行したからかもしんない…が、時間がないので未検証…
前のエントリ: 特定条件のセル数をカウント [excel]
次のエントリ: 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