3

私は、WAVファイルをエクスポートし、lame.exeを使用してFLfile.runCommandLineを介してMP3としてエンコードするJSFLスクリプトに取り組んでいます。これを機能させるために、コマンドラインのスペースを適切にエスケープする方法がわかりません。

var command_line = '"C:\pathWithSpaces in pathname\lame.exe" -option1 -option2 "C:\different pathWithSpaces\targetfile.wav" "C:\different pathWithSpaces\targetfile.mp3"' ;
FLfile.runCommandLine (command_line);

コマンドウィンドウが表示されます:

'C:\ pathWithSpaces'は、内部または外部コマンド、操作可能なプログラム、またはバッチファイルとして再認識されません。

スペースを'%20'とcarrat-space'^'に置き換えようとしましたが、どちらも失敗します。var command_lineは、コマンドウィンドウに手動で切り取って貼り付けた場合に機能することが確認されています。スペースは、JSFLスクリプト内でフォームを実行する場合にのみ問題になるようです。

(環境内のパスからスペースを削除することはオプションではありません。command_line変数は動的に生成され、他のユーザーに役立つようにスペースを処理できる必要があります。)

4

5 に答える 5

0

それはおそらく問題ではありません。バックスラッシュをエスケープする必要があります: C:\\pathWithSpaces in pathname\\lame.exe"

別の方法は、ウィンドウも理解するスラッシュを使用することです。

于 2012-02-02T17:51:40.410 に答える
0

.bat ファイルを実行する必要はまったくありません。問題は、を呼び出す前に、実行可能 URI へのパスをプラットフォーム パスに変換していないことですrunCommandLine。コードは次のようになります。

var exe_path = FLfile.uriToPlatformPath("C:\pathWithSpaces in pathname\lame.exe");

var command_line ='"' + exe_path + '" -option1 -option2 "C:\different pathWithSpaces\targetfile.wav" "C:\different pathWithSpaces\targetfile.mp3"';

FLfile.runCommandLine (command_line);
于 2015-08-01T00:53:16.547 に答える
0

ほら、これについては私が間違っているかもしれません!たくさんのオプションを試しましたが、うまくいきませんでした。複数の引数と関係があるのではないかと思います...さらに調査しないとわかりません。

ただし、簡単な回避策は、コマンドをバッチ ファイルに保存してから実行することです。

var command = '"C:/pathWithSpaces in pathname/lame.exe" -option1 -option2 "C:/different pathWithSpaces/targetfile.wav" "C:/different pathWithSpaces/targetfile.mp3"';
FLfile.write('file:///C|/temp/lame.bat', command);
FLfile.runCommandLine('"c:/temp/lame.bat"');

それが役立つことを願っています:)

于 2012-02-02T22:51:17.293 に答える
0

デイブのリードに従って、私はこのコードになりました:

//get users temp folder& convert to URI
var win_tempLamePath =FLfile.getSystemTempFolder()+'lame.bat';
var win_tempLameURI =FLfile.platformPathToURI(win_tempLamePath);
//generate proper syntax for windows CMD
var win_fileURI = (FLfile.uriToPlatformPath(<URI for target WAV file>);
var win_command =('"'+win_uri+'lame.exe" -V0 -h "' + win_fileURI + '.' + wav +'" "' + win_fileURI + '.mp3" 2> "'+ win_fileURI+'.txt'+'"');
//write the command to lame.bat(aka win_tempLameURI)  & execute
FLfile.write(win_tempLameURI, win_command);
FLfile.runCommandLine(win_tempLamePath);

win_command の最後のチャンクに注意してください

 2> "'+ win_fileURI+'.txt'+'"

LAME.EXEをテキストファイルに出力することです。通常、">"​​ は Windows cmd でこれを行いますが、このスレッドで学んだように、LAME.EXE は同じ効果のために "2>" を必要とする奇妙な出力方法を使用します。

于 2012-02-03T17:50:48.890 に答える