0

ラップトップの ssh サーバーへのバックアップを自動化する Ruby スクリプトを作成しています。ただし、システムコールで立ち往生しているようです。

$x = "C:\\Program Files\\7-Zip\\7z.exe"

###calibre library###
$library = "C:\\Users\\maste_000\\Documents\\Calibre Library"
system($x, "a library.7z", $library, " -r")

exe 7z を呼び出して、$library が指すディレクトリから library.7z というファイルを作成しようとしています。これをどのように調整しても、7zコマンドエラーが発生し続けます。これは、システムコールの実行方法と関係があると思います。

4

1 に答える 1

2

私はあなたがこれを望んでいると思います:

system($x, 'a', 'library.7z', $library, '-r')

これにより、コマンド プロンプトで次のように同じ効果が得られます。

C:\Program Files\7-Zip\7z.exe a library.7z "C:\Users\maste_000\Documents\Calibre Library" -r

もちろん、Windows コマンド ラインで引用符を使用する方法を完全に忘れていないと仮定します。

;$libraryの複数引数形式を使用する場合、スペースは問題になりません。systemこのバージョンの を使用する理由のsystem1 つは、シェルが邪魔なときに必要な奇妙な引用をすべて避けるためです。主なことは、2 番目の文字としてスペースを使用した 1 つの引数ではなく、2 つの引数'a'を分離する必要があることです。'library.7z'その分離がなければ、あなたはこれを言っているでしょう:

C:\Program Files\7-Zip\7z.exe "a library.7z" "C:\Users\maste_000\Documents\Calibre Library" -r

それは正しくないようです。

于 2012-11-13T06:27:19.013 に答える