Помомгите решить проблемму. Есть скрипт, который делает листинг файлов на всех жёстких дисках по маске и записывает результат в файл. Так вот отрабатывается он как-то странно, периодически не отрабатываются некоторые из масок и часто пишется не в той кодовой станице, хотя команда на изменение кодовой страницы добавлена. Сперва думал что вся проблемма в маленьком слипе между циклами, но при увеличении времени ситуация не меняется. Скрипт то работает нормально то нет.
Код:

Opt("ExpandEnvStrings", 1)
Opt("ExpandVarStrings", 1)
$tmpfle = @WindowsDir&'\Temp\files.tmp'
Call ("Listbase", "*.doc")
Call ("Listbase", "*.xls")
Call ("Listbase", "*.ppt")
;--- Function ------
func ListBase($ext)
;Получаем буквы имеющихся жёстких дисков
$drives = DriveGetDrive("FIXED")
If @error Then Exit
;По очереди открываем каждый жёсткий диск
For $i=1 to $drives[0]
;Получаем листинг файлов для текущего расширения на текущем диске и записываем его в файл
$dr=$drives[$i]&'\'&$ext
Run('%Comspec% /c chcp 1251 | dir "$dr$" /s /b >> $tmpfle$','',@SW_HIDE)
Sleep (500)
Next
EndFunc
Причем вот такая функций работает нормально (решил просто слегка сократить код, т.к. на мой взгляд через команду echo сделать это проще и быстрее)
Код:

;--- Func ----------------------------
func ListBase($ext)
;Получаем буквы имеющихся жёстких дисков
$drives = DriveGetDrive("FIXED")
If @error Then Exit
;Открываем файл со списком
$file = FileOpen($tmpfle, 1)
;По очереди открываем каждый жёсткий диск
For $i=1 to $drives[0]
;Получаем листинг файлов для текущего расширения на текущем диске
$dr=dir($drives[$i]&'\'&$ext)
;Заполняем файл со списком построчно из предыдущего листинга
For $k=1 To $dr[0]-1
FileWrite($file, '"' & $dr[$k] & '"' & @CRLF)
Next
$dr=0
Next
FileClose($file)
EndFunc
;Функция получения списка файлов по заданному пути для заданного расширения
Func dir($d)
$dr = Run('%Comspec% /c dir "$d$" /s /b','',0,6)
$f = ''
While not @error
$f = $f & StdoutRead($dr)
Wend
Return (StringSplit(StringReplace($f,@LF,''),@CR))
EndFunc