Skip to main content
Participant
November 22, 2019
解決済み

ExtendScript Toolkit使用中に「Windowsエクスプローラーの「プロパティ」コマンドを使って、ファイルのロックを解除してください」と出てしまいます

  • November 22, 2019
  • 返信数 1.
  • 1639 ビュー

自分だけではどうにもならなくなったため、相談させていただきたいです。

ツール:ExtendScript Toolkit
    Photoshop 2019 v20.0.7
OS:Windows10 ver 1803

 

ExtendScript Toolkit(java script)でPhotoshop上で使用するスクリプトを作成しています。
開いたPSDデータを編集したのち、開いた場所とは異なるフォルダに別名で保存することが目的です。

 ・パスで指示したフォルダーに別名保存をする
 ・別名保存するファイル名はレイヤー名とする
 ・PSDデータで保存する

この3点を目指し書いているのですが、スクリプトを再生させると保存の段階で下記のメッセージが出ます。

 

───────────────────

「(指定いないはずのファイル名)」という名前で複製を保存できません。必要なアクセス権限がないか、他のプログラムでファイルを使用しているため、ファイルがロックされています。Windowsエクスプローラーの「プロパティ」コマンドを使って、ファイルのロックを解除してください。

───────────────────

 

試したこと

  • 手動で別名保存をやれば問題はなく、スクリプトで指示を出すとエラーになります
  • プロパティからセキュリティを見ても権限が与えられていないわけではないです
  • Photoshopの仮想記憶ディスクも確認しましたが、使用したいディスクは有効になっています
  • Photoshopを最新の2020にアップデートしましたが同じ現象になります
  • PhotoshopとExtendScript Toolkit以外に起動しているソフトはありません
  • 一度エクスプローラーを再起動させましたが、結果は変わらないです

 

 

心当たり、解説の方法がありましたらご教授を願いたく存じます。

よろしくお願いいたします。

 

このトピックへの返信は締め切られました。
解決に役立った回答 Omachi

おそらくここですね。

var file_fullname = file_path + "¥" + file_name;

Windowsの場合、activeDocument.pathで得られるのは

/c/Users/abc

といった形式になりますので

var file_fullname = file_path + "/" + file_name;

 に変更してください。

 

あと、おそらく自分で何をやっているのか分からなくなっている部分があると思いますが

var docName = app. activeDocument. name;

から

var file_fullname = file_path + "¥" + file_name;

までの部分は

//保存先指定
var file_path = activeDocument.path;
var file_name = activeDocument.artLayers[1].name;
var psd_obj = new File(file_path + "/" + file_name);

だけで大丈夫です。

 

返信数 1

Omachi
Legend
November 23, 2019

可能性として、

A. ファイルの指定方法が間違っている

B. Windowsのファイル名として使えない文字(*+<>:?\など)をレイヤー名に指定している

C. Windowsのファイル名として使えない単語(prn、con、com1など)をレイヤー名に指定している(かつ、拡張子をつけ忘れている)

を思いつきました。

A.の場合は具体的にコードを見せてもらうと、どこが問題か指摘できると思います。B.C.の場合はレイヤー名が分からないと、該当するかどうか判断できません。

na74summer作成者
Participant
November 25, 2019

コメントありがとうございます!

下記がコードになります。ファイル名となるレイヤー名は数字のみにしています。

フォルダ名は数字とアルファベットのみで記号等はいれてはおりません。

var docName = app. activeDocument. name;

//一番上のレイヤー名をファイル名に
var file_path = activeDocument.path;
var layName = activeDocument.artLayers[1].name;
var file_path = activeDocument.path;
var file_name = layName;
var psd_obj = new File(file_fullname);

////保存先指定
var  file_path = new Folder ("保存したいフォルダの場所 パス");
var file_fullname = file_path + "¥" + file_name;

//psdオプション
var psd_opt = new PhotoshopSaveOptions();
psd_opt.alphaChannels = true;
psd_opt.annotations = true;
psd_opt.embedColorProfile = false;
psd_opt.layers = true;
psd_opt.spotColors = false;
activeDocument.saveAs(psd_obj, psd_opt, false, Extension.LOWERCASE);

 拙いものですが、ご指摘いただければ幸いです。

Omachi
Omachi解決!
Legend
November 27, 2019

おそらくここですね。

var file_fullname = file_path + "¥" + file_name;

Windowsの場合、activeDocument.pathで得られるのは

/c/Users/abc

といった形式になりますので

var file_fullname = file_path + "/" + file_name;

 に変更してください。

 

あと、おそらく自分で何をやっているのか分からなくなっている部分があると思いますが

var docName = app. activeDocument. name;

から

var file_fullname = file_path + "¥" + file_name;

までの部分は

//保存先指定
var file_path = activeDocument.path;
var file_name = activeDocument.artLayers[1].name;
var psd_obj = new File(file_path + "/" + file_name);

だけで大丈夫です。