2

OS X Yosemite で導入された JavaScript for Automation を使用して、ファイルを移動 (または複製) するという非常に単純なことをしようとしています。

これまでのところ、私はこのようなものを持っています。

finder = Application("Finder")

finder.move(Path("/Users/user/Source/file.pdf"), {
    to: Path("/Users/user/Destination/file.pdf"),
    replacing: true
})

結果は良くありません。

Error -1728: Can't get object.

もちろん、次のようなものを使用することもできますdoShellScript("mv source destination")が、Finder + JAX ソリューションの方が優れているようです。

4

3 に答える 3

0

ええ、JXA と Finder がめちゃくちゃです。問題は、JavaScript の型なし変数に対する Finder の愛情深いエイリアスなどにあると思います。最初に考えたのは、問題はターゲットファイルが存在せず、Path()-call が variable type を返せないことでしたfile。しかし、その名前で空のターゲット ファイルを作成しても、スクリプトは失敗します (ただし、別のエラー メッセージが表示されます...)

私が見つけた唯一の方法は、JXA リリース ノートで JXA-ObjC-Bridge を記述子として使用することでした。

ObjC.import('Cocoa')
error = $()
fMa = $.NSFileManager.defaultManager
fileMoved = fMa.moveItemAtPathToPathError('/Users/user/Source/file.pdf','/Users/user/Destination/file.pdf', error)
if (!fileMoved) {
    $.NSBeep();
    // or do something else depending on error.code
}

シェル スクリプトを使用するよりもエレガントな方法だと思いますが、それは単なる感覚です ;-)

乾杯、マイケル / ハンブルグ

于 2015-03-28T18:19:23.510 に答える
-1

このスクリプトは、移動コマンドで Finder オブジェクトを使用して機能します。

var Finder = Application("Finder")
var homeDirectory = Finder.startupDisk.folders["Users"].folders["user"]

var sourceFile = homeDirectory.folders["Source"].files["file.pdf"]
var destinationFolder = homeDirectory.folders["Destination"]

Finder.move(sourceFile, { to: destinationFolder })

複製コマンドでも機能します。

于 2015-06-29T19:51:00.350 に答える