我可以从PHP获取文件的短DOS名称吗?

我可以从PHP获取文件的短DOS名称吗?,php,dos,Php,Dos,我想将文件路径作为参数从PHP传递给可执行文件,文件路径可能包含空格。可执行文件似乎不能处理参数周围的引号,所以我想也许我可以传递短DOS名称而不是长DOS名称 PHP知道老式DOS 8.3文件名吗?对空格进行反斜杠怎么样 Home/My Documents/ --> Home/My\ Documents/ 您可能需要查看一下escapeshellarg(),并将参数放在双引号之间。您需要windows上的内核32中的API。要从PHP调用此函数,您需要使用 php/win32随附。您

我想将文件路径作为参数从PHP传递给可执行文件,文件路径可能包含空格。可执行文件似乎不能处理参数周围的引号,所以我想也许我可以传递短DOS名称而不是长DOS名称


PHP知道老式DOS 8.3文件名吗?

对空格进行反斜杠怎么样

Home/My Documents/  --> Home/My\ Documents/

您可能需要查看一下escapeshellarg(),并将参数放在双引号之间。

您需要windows上的内核32中的API。要从PHP调用此函数,您需要使用

php/win32随附。您可以使用它创建WSH,然后查询的。
我试图运行的可执行文件将反斜杠视为名称的一部分。在您的示例中,它会尝试打开Home/My\n文件,您可能需要phphil建议的escapeshellarg。如果直接从命令行调用,可能会用反斜杠转义,这可能会更快。不幸的是,我无法测试它,因为PHP5.3rc2版本没有w32模块:-/希望你不介意我在你的文章中添加链接。我认为这也应该可以。它在我执行dir命令时有效,但在我执行试图运行的命令时无效。使用escapeshellcmd()来转义可执行文件,使用escapeshellarg()来转义参数。谢谢你的建议,但我一点也不懂escapeshellcmd。在Windows上,它似乎只是将特殊字符替换为空格。”C:\Documents and Settings\don\foo'变为“C:Documents and Settings don foo”。这有什么用?
<?php
$objFSO = new COM("Scripting.FileSystemObject");
$objFile = $objFSO->GetFile(FILE);
echo "path: ", $objFile->Path, "\nshort path: ", $objFile->ShortPath;
path: C:\Dokumente und Einstellungen\Volker\Desktop\test.php short path: C:\DOKUME~1\Volker\Desktop\test.php