Black_Hole [?]
где написано что код объявленный через переменную, правильнее чистого кода
Попробую объяснить, как сам понимаю...
Что значит открыть файл? Это значит создать поток ввода-вывода. Один файл можно "открыть" несколько раз, т.е. создать несколько потоков и каждый из них использовать для работы с содержимым файла (чтение, запись, добавление, удаление и т.д.). Следовательно в конце нужно закрыть все созданные потоки. Пример
$f1 = FileOpen("file.txt", 1)
FileWrite($f1, "Поток 1" & @CRLF)
$f2 = FileOpen("file.txt", 1)
FileWrite($f2, "Поток 2" & @CRLF)
$f3 = FileOpen("file.txt", 1)
FileWrite($f3, "Поток 3" & @CRLF)
ConsoleWrite($f1 & ":" & $f2 & ":" & $f3 & @CRLF)
FileClose($f1)
FileClose($f2)
FileClose($f3)
Каждая функция FileOpen() создаёт свой поток и возвращает так называемый файловый дескриптор. Другими словами - номер потока. В примере для одного файла создано три потока с номерами 1, 2 и 3. И каждый поток используется для записи. В конце все потоки закрываются. И, чтобы не запутаться в потоках, используют переменные для их хранения.
Global $a="c:\01.bat"
filewrite(fileopen($a,16+2),"")
filewrite(fileopen($a,16+1),"pause")
fileclose(fileopen($a,16+2))
fileclose(fileopen($a,16+1))
ShellExecute("c:\01.bat")
Здесь для файла создано четыре разных потока: первые два использованы для записи и НЕ закрыты, а последние два закрыты не будучи использованными.
$a = filewrite(fileopen("./cmd.bat",16+2),"pause")
fileclose($a)
ShellExecute("./cmd.bat")
Здесь дескриптор файла (единица) совпадает со значением, возвращаемым функцией записи (тоже единица). Поэтому файл закрывается.
Black_Hole, для создания командного файла не нужно открывать его в бинарном режиме (16). Достаточно использовать функцию FileWrite(), как советуют
ivsatel и
BIOS, с полным путём к файлу. Эта функция создаст файл, откроет его, запишет данные и закроет. Никаких проблем с дескрипторами.