some command? 的行为不同-6ren"> some command? 的行为不同-在我的(cmd.exe)当前工作目录中有一个名为libre-office-document.odt的文件。我可以使用 start 命令毫无问题地打开此文档: c:\path\to\> start li-6ren">
gpt4 book ai didi

perl - 为什么 Perl 的 "system (' 某些命令')"与 c :\> some command? 的行为不同

转载 作者:行者123 更新时间:2023-12-01 16:48:40 25 4
gpt4 key购买 nike

在我的(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")

并在同一目录中执行它,我收到以下消息框:

LibreOffice 4.4 - Fatal Error

The application cannot be started.
User installation could not be completed.

显然,使用 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);

关于perl - 为什么 Perl 的 "system (' 某些命令')"与 c :\> some command? 的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38323588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com