I retrieve path names using the File::Find module, and "windowsify" the paths by changing
/cygdrive/f --> F: and / --> \\ globally. What more do I have to do to make it work? My actual code was similar to this: #!/usr/bin/perl -w use File::Find; use Win32::Shortcut; sub wanted { return unless /\.lnk$/i; my $winname = $File::Find::name; $winname =~ s{^/cygdrive/f/}{F:\\}; $winname =~ s{/}{\\}g; my $LINK = new File::Find::Shortcut($winname) or do{warn "Could not find '$winname'.\n"; return}; $LINK->{'Path'} =~ s{^C:\\Documents and settings\\blah\\My Pictures\ \}{F:\\Blah Pictures\\} and $LINK->Save(); } File::Find::find(\&wanted, "/cygdrive/f"); The script fixes shortcuts after moving a folder hierarchy to a new drive. It works for shortcuts having ascii-only names. I suspect the problem is related to this call in the module source file Shortcut.xs:498: MultiByteToWideChar(CP_ACP, 0, filename, -1, (wchar_t *)wfilename, MAX_PATH); I suspect that CP_ACP, the "ansi" codepage, mangles 8-bit codes somehow.