use Win32::OLE qw(in); use Devel::Peek; #CP_UTF8 is very important as it translates between Perl strings and Unicode strings used by the OLE interface Win32::OLE->Option(CP => Win32::OLE::CP_UTF8); $obj = Win32::OLE->new('Scripting.FileSystemObject'); $folder = $obj->GetFolder("."); $collection= $folder->{Files}; mkdir ("c:\\newfolder")||die; foreach $value (in $collection) { $filename= %$value->{Name}; next if ($filename !~ /.txt/); Dump("$filename"); #check if the utf8 flag is on $file=$obj->GetFile("$filename"); $file->Move("c:\\newfolder\\$filename"); print (Win32::OLE->LastError() || "success\n\n"); }