为什么Perl系统调用无法调用内部Windows命令?

时间:2012-04-12 07:16:07

标签: windows perl cygwin cmd system

在我们的一台Windows XP计算机上,Perl系统命令(例如dir /b)会生成错误消息,例如:/b: no such file or directory。换句话说,该开关被解释为文件名。

无论我使用backticksopen()还是system(),都会发生这种情况。我甚至尝试将交换机作为单独的arg传递给system()。当然,我已经确认该调用在DOS命令行或批处理脚本上正常工作。

还有其他人遇到过这个吗?

2 个答案:

答案 0 :(得分:5)

您可能安装了Cygwin,而dir.exe位于您的路径中,而不是cmd.exe内置的ls的别名。

C:\> which dir
/usr/bin/dir

C:\> c:\opt\cygwin\bin\dir.exe --version
dir (GNU coreutils) 8.15
Packaged by Cygwin (8.15-1)
…

C:\> dir /b
…

C:\> perl -e "print `dir /b`"
dir: cannot access /b: No such file or directory

C:\> perl -e "print `cmd /c dir /b`"
…

答案 1 :(得分:1)

未验证:

dir是一个命令解释器内置命令。改为使用/c/k开关运行命令解释程序,然后执行要执行的命令。