在我的(cmd.exe)当前工作目录中,有一个名为libre-office-document.odt的文件。我可以使用start
命令打开此文档,而不会出现问题:
c:\path\to\> start libre-office-document.odt
但是,如果我使用以下简单的Perl脚本
use warnings;
use strict;
print system("start libre-office-document.odt")
并在同一目录中执行它,我得到以下消息框:
显然,使用Perl的
system
命令时,某些行为会有所不同。我无法确定这是什么以及如何使用system
命令打开文档。 最佳答案
使用反引号捕获输出。
您可以检查具有assoc和ftype的文件关联,然后对其进行硬编码,或尝试执行以下操作:
use strict;
use warnings;
my $assoc = `assoc .odt`;
# .odt=LibreOffice.WriterDocument.1
chomp $assoc;
$assoc =~ s/.*=//g;
my $ftype = `ftype $assoc`;
# LibreOffice.WriterDocument.1="C:\Program Files\LibreOffice\program\soffice.exe" -o "%1"
chomp $ftype;
$ftype =~ /.*=("[^"]*")/;
$ftype = $1;
# "C:\Program Files\LibreOffice\program\soffice.exe" libre-office-document.odt
my $cmd = "$ftype libre-office-document.odt";
system($cmd);