1

作成したバッチ ファイルを使用して R スクリプトを実行しようとしています。バッチ スクリプトを柔軟にして、他のコンピューターに移動したり、ネットワーク ドライブから実行したりして、すべての場合に機能するようにしたいと考えています。私がしていることは、バッチ ファイルが開かれたファイルのパスを収集し、そのパスを使用して R スクリプトをアクティブにすることです。

特殊文字を含まないファイル パスがある場合は問題なく動作しますが、特殊文字で問題が発生しました。

コードは次のとおりです。

@ECHO OFF
setlocal EnableDelayedExpansion
set "_SCRIPT_DRIVE=%~d0"
set "_SCRIPT_PATH=%~p0"
set "PATH=!_SCRIPT_DRIVE!!_SCRIPT_PATH!"

これは、私が行うときのように、希望どおりに機能するようです

ECHO !PATH!

目的の出力が得られます

C:\\A&B\File

ただし、後で Rscript.exe コマンドを使用してこれを実行すると、展開の遅延が認識されず、アンパサンドが特殊文字として実行されます。次の入力:

"!PATH!\R-3.0.1\bin\Rscript.exe" "!PATH!Scripts\Test.R"

戻り値:

'C:\\A' is not recognized as an internal or external command, operable program or batch file.

ただし、この問題が発生するのは、Rscript.exe を実行しようとしたときだけです。次のようなファイルを開くことができます

"!PATH!Scripts\Test.R"

そして、それは問題なく実行されます。他の誰かが以前にこの問題に遭遇したことがありますか? 私の構文に問題がある人はいますか?

編集:解決済み

将来この投稿に出くわした人のために、私はこの問題の解決策を見つけることができました. バッチ スクリプト エラーではなく、Rscript.exe の問題であることがわかりました。何が起こっているのかわかりません。に直接ある Rscript.exe を使用する代わりに、\binさらに一歩進んで、"!PATH!\R-3.0.1\bin\i386\Rscript.exe"動作するものを使用する必要があります。おそらく、64 ビットではなく 32 ビット マシンで実行しているためです。

4

1 に答える 1

1

バッチ ファイルを使用する&と、通常は^. 私は Windows マシンを持っていませんが、最初にこれが機能するかどうかを手動で確認できますか。そうであれば、必要に応じて文字列エスケープを行う機能を実装するためにあなたと協力できます。

以下の 2 つのうちの 1 つを代用するには (Windows マシンを持っていないのでご容赦ください)、

set workable_filename=%file_name:^&=^^&%
set workable_filename=%file_name:&=^&%
@REM:: I cannot test, but one of these should work
于 2013-08-29T18:43:57.150 に答える