use Win32::OLE qw(in); use Encode; Win32::OLE->Option(CP => Win32::OLE::CP_UTF8); #Input: -dir to read files from #Output: -array ref with files sub ReadDirWithWin32OLE { my $dir = shift; #backslashes only in dir $dir=~s-\/-\\-g; #remove last backslash $dir=~s-\\\s*$--; if (not -e $dir) { warn "dir ($dir) does not exist"; return; } my $fso = Win32::OLE->new("Scripting.FileSystemObject"); #won't work if $dir contains unicode chars :( my $folder = $fso->GetFolder($dir); if (!$folder) { warn "Problem creating Win32::OLE (folder) object"; return; } my @filesFound = (); foreach my $file (in $folder->Files) { my $shortFilename = $file->ShortName; #my $shortFilename = $file->Name; $shortFilename = $dir . "\\" . $shortFilename; if (-e $shortFilename) { print "\nFile Found", $shortFilename; push @filesFound, $shortFilename; } else { print "\nFILE NOT FOUND!! (this should not happen):", $shortFilename; } } return \@filesFound; }