The problem with your code, in case it isn't clear from Marco's answers, is that Lazarus pass "áéíóú" as a UTF8 string but cmd interprets it as an single-byte ANSI string.
I find that problem very frequently when creating/copying files from Linux to an NTFS or FAT partition; Windows Explorer/shell shows those"funny" characters in the file name.
As an alternative you could use UTF8ToWinCP(), in unit LazUTF8 of LazUtils, to convert the UTF8 filename to the Windows code-page.