Cygwinプログラムを使用してWindowsで直接ドキュメントを開く

Cygwinプログラムを使用してWindowsで直接ドキュメントを開く

Windows 10を使用して文書を開くことはできますか?「利用可能」次のCygwinに付属のプログラムの機能チャトゥラ

次に開く

これはCygwinプログラムに付属しています。

最初の試み:Windowsで直接Cygwinプログラム、つまり実行可能ファイルC:\cygwin64\bin(標準のインストールパスの場合)を使用してみてください。

にもかかわらず「利用可能」問題は、最も単純なプログラムを除いて(最初にログインシェルを実行せずに)、Cygwinプログラムを直接開くことが通常正しく機能しないことです。

したがって、Cygwin Xサーバーを起動し、Windowsシステム環境変数を設定しますDISPLAY(これは通過する):0.0使用「利用可能」C:\book.pdfZathuraを選択してGUIC:\cygwin64\bin\zathura.exeウィンドウを開きます。ただし、次のエラーが発生します。

error: Unknown file type: 'cannot open `/cygdrive/c/Windows/system32/C:\book.pdf'    
(No such file or directory)'

明らかにここのパスに問題があります。

2回目の試み:ターゲットで Windows ショートカットを使用して問題を解決します。

C:\cygwin64\bin\bash.exe -l -c 'zathura "`cygpath "$0"`"'

少なくともこれはWindowsエクスプローラのドラッグアンドドロップに機能します。しかし、一緒ではありません。「次に開く」。

emitpath.lnk最小限の例として、ターゲットを使用してWindowsのショートカットを作成します。

C:\cygwin64\bin\bash.exe -l -c 'echo "`cygpath "$0"`" > out.path'

ドキュメントをショートカットにドラッグアンドドロップすると、期待どおりに機能します。out.pathCygwinホームディレクトリにファイルが作成され、サイグウィン化「文書へのパスが記録されています。私たちはかなり近いです。

しかし残念ながら「利用可能」これはうまくいきません。何も起こりません。

だから使用する方法「利用可能」Windows 10でCygwinプログラムを使用していますか?

実行可能なラッパーを作成するよりも簡単な方法があります。

答え1

次のバッチファイルを作成します。

@echo off
D:
chdir D:\cygwin64\bin
set A=%1
bash --login  -c "/usr/bin/echo $(cygpath  $A)"
pause

のルートディレクトリにCygwin1つある必要がありますCygwin.bat。フォルダに
バッチファイルへのリンクを配置します。SendTo

写真フォルダから写真を送信すると、新しいCMDウィンドウに表示されます。

/cygdrive/c/Users/Marco/Pictures/img250.jpg
Drücken Sie eine beliebige Taste . . .

最後はPress any keyドイツ語です。
ここでバッチを変更して、必要なcygwinプログラムを実行できます。

Xサーバーを使用する場合は、実行中にタイミングの問題が発生する可能性があるため、最初にXwinサーバーを実行するのが最善です。

答え2

matzeriソリューションの問題は、最も正常なファイル名でのみ機能することです。ファイル名にスペースがあり、壊れています。

C:\book 1.pdfこれが開く必要がある文書の場合は、bash側でエスケープが正しい文字列で終わりたいことを覚えておいてください。次のようになります。

"/usr/bin/zathura \"$(cygpath 'C:\book 1.pdf')\""

ただし、Windowsは2つの方法でドキュメントパスをバッチスクリプトにパラメータとして渡します。

  • 「利用可能」:いつも二重引用符。
  • 「ドラッグ&ドロップ」:唯一時々二重引用符(スペースがある場合)

バッチ言語のエスケープ規則は非常に難しいので、文字列を作成するために多くの中間変数を使用するのが最善です。

私達は次を使用できます:

  • ^Escaped"が引用符を持たない文字列についてのみ参照してください。ここ

  • set x=%x:"=%"変数の文字列内のすべての項目を置き換えますx

  • 一重引用符'は通常の文字なので、エスケープする必要はありません。

したがって、次のバッチファイルが操作を実行します。

@echo off
C:
cd C:\cygwin64\bin
set pdfpath=%1
set pdfpath=%pdfpath:"=%
set cygpart=$(cygpath '%pdfpath%')
set fullcmd=/usr/bin/zathura \^"%cygpart%\^"
bash -l -c "%fullcmd%"
pause

それでも問題を引き起こす奇妙なファイル名があるかもしれません。ただし、少なくとも空白、括弧、および括弧を含むすべての一般的なファイル名で動作します。

関連情報