使用自定义命令打开文件:如何在 cmd 行中指定文件?

使用自定义命令打开文件:如何在 cmd 行中指定文件?

我想通过 WINE 使用 PDF-XChange Viewer 打开 PDF。我应该如何在“自定义命令”行中指定 pdf 文件名,以便我可以通过双击使用 PDF-XChange Viewer 打开 PDF 文件?我尝试按照建议使用 \"z:%f\"这里使用 Foxit 阅读器。但我的 PDF-XChange Viewer 只以一个空白窗口启动。

wine "c:/Program Files/Tracker Software/PDF Viewer/PDFXCview.exe" \"z:%f\"

我使用 Ubuntu 10.04 和 WINE 1.2.2。PDF-XChange Viewer 版本 2.5。

答案1

找到有关同一问题的博客文章福祉阅读器对于 PDF-XChange Viewer。它们都不适合我。所以我对它们进行了修改,并得到了一个适合我的情况的:

#!/bin/bash  
Filename="z:${1//\//\\}"
wine "C:\Program Files\Tracker Software\PDF Viewer\PDFXCview.exe" $Filename

保存此 bash 脚本并使用此脚本打开 pdf。现在双击 pdf 文件将使用 PDF-XChange Viewer 打开它们。

答案2

如果脚本有效,那么你应该接受这个答案,即使它是你自己的答案。

就自定义命令而言,其他应用程序所用的功能与您尝试的非常接近,但有一些细微的差别。

wine "C:\Program Files\Tracker Software\PDF Viewer\PDFXCview.exe" Z:%f

此处引用了 photoshop,并添加了有关更改显示名称(如果需要)以供右键单击使用的信息 -http://ubuntuforums.org/showpost.php?p=9193687&postcount=9

答案3

这是基于@Flint 的出色脚本。

起初,我尝试在Wine 程序的"Z:"%U桌面文件字段末尾使用变量。它工作正常,直到我打开一个没有指定文件的程序。Wine 程序抱怨文件丢失,因为该行指向驱动器 Z:,这显然不是文件,而是绝对文件路径。或者 Wine 程序中弹出类似消息。有点烦人。Exec=Exec=File not found: Z:

问题"Z:"%U是,如果使用 Z:,它就不是条件变量。但是,Wine 绝对需要 Z:,因为否则它无法找到正确的文件路径。

您的脚本将整个"Z:"%U事情变成一个条件从句。该脚本完全按照我的期望完成工作。

但是,脚本还应考虑所有以大写字母编写的 exe 文件。到目前为止,它无法将任何 MS Office 文件(docx、pptx...)指向 MS Office 2010,因为所有程序可执行文件都以WINWORD.EXE或 的形式编写POWERPNT.EXE。当然,可执行文件可以重命名为小写,但我更喜欢更通用的解决方案,而不是为每个程序重命名单个 exe。

肮脏而通用的解决方案是修改脚本代码,例如:

#!/bin/bash

allargs=("$@")

fixpath=0
for idx in "${!allargs[@]}"; do
    arg="${allargs[$idx]}"

    if [[ $fixpath -eq 0 ]]; then
        # fix file paths only after the first executable is found in arg
        if [[ "$arg" == *.exe ]]; then
            fixpath=1
        fi
        if [[ "$arg" == *.EXE ]]; then
            fixpath=1
        fi
        continue
    elif [[ $fixpath -eq 1 ]]; then
        # if arg starts with '/' and it's a path that exists on host
        # precede the path with drive 'Z:'
        if [[ "${arg:0:1}" == '/' && -e "$arg" ]]; then
            allargs[$idx]="z:${arg//\//\\}"
        fi
    fi
done

exec env "${allargs[@]}"

由于某种原因,该or操作符不起作用。无论如何,我相信有更优雅的方法来实现相同的结果。

答案4

我知道这是一个老问题,但我想分享我的解决方案,这是我在开始使用 PDFXchangeEditor(PDFXchangeViewer 的后继者)后想到的,然后遇到了一个问题,让它接受来自主机操作系统的多个输入文件。首先,接受的答案和已发布的所有其他答案都假设该程序只能处理单个文件。实际上,您可以一次向它抛出多个文件参数,只需一点技巧,它就会成功打开它们。

诀窍是在应用程序的 .desktop 启动器中使用字段%F中的代码扩展Exec,并在字段中将所有扩展的本地文件参数放在前面,Z:可以使用以下脚本完成

打电话wine-env。这进去/usr/local/bin,一定要给它chmod +x

#!/bin/bash

allargs=("$@")

fixpath=0
for idx in "${!allargs[@]}"; do
    arg="${allargs[$idx]}"

    if [[ $fixpath -eq 0 ]]; then
        # fix file paths only after the first executable is found in arg
        if [[ "$arg" == *.exe ]]; then
            fixpath=1
        fi
        continue
    elif [[ $fixpath -eq 1 ]]; then
        # if arg starts with '/' and it's a path that exists on host
        # precede the path with drive 'Z:'
        if [[ "${arg:0:1}" == '/' && -e "$arg" ]]; then
            allargs[$idx]="Z:$arg"
        fi
    fi
done

exec env "${allargs[@]}"

对于应用程序的 .desktop 文件,调用它pdfxce.desktop并放入~/.local/share/applications/,其内容应如下所示

[Desktop Entry]
Name=PDF-XChange Editor
Type=Application
Terminal=false
Exec=wine-env WINEDEBUG=-all WINEPREFIX=/home/<user>/.local/share/bottles/pdfxce wine PDFXEdit.exe %F
Icon=/home/<user>/.local/share/icons/bottles/pdfxce-pdfxedit.png
Path=/home/<user>/.local/share/bottles/pdfxce/drive_c/Program Files/Tracker Software/PDF Editor
StartupNotify=true
StartupWMClass=PDFXEdit.exe

您需要用自己的用户名更改该部分。我将所有 wineprefixes 目录保存在一个名为“bottles”的文件夹中。您可能有自己的方式来组织您的 wineprefixes,因此请相应地更改所有包含“bottles”的部分

最后一步,按常规将 PDF 文件分配给应用程序(右键单击 pdf -> Properties->Open With选项卡)

参考:Freedesktop 的桌面入口规范

相关内容