Я пытаюсь запустить скрипт R через пакетный файл, который я написал. Я хочу, чтобы пакетный скрипт был гибким, чтобы я мог перенести его на другие компьютеры или запустить его с сетевого диска, и он будет работать во всех случаях. Я собираю путь к файлу, из которого открывается командный файл, а затем используйте этот путь для активации скрипта R.Ampersand в пути к файлу для Rscript.exe
Он отлично работает, когда у меня есть путь к файлу без специальных символов, но у меня возникла проблема со специальными символами.
Вот код:
@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"
Returns:
'C:\\A' is not recognized as an internal or external command, operable program or batch file.
Я только эта проблема, хотя, когда я пытаюсь запустить Rscript.exe. Я отлично могу открыть файл, такой как
"!PATH!Scripts\Test.R"
И он работает без проблем. Кто-нибудь еще сталкивался с этой проблемой раньше? Кто-нибудь видит какие-либо проблемы с моим синтаксисом?
EDIT: решаемые
Для тех, кто натыкается на этот пост в будущем, мне удалось найти решение этой проблемы. Оказывается, это вовсе не ошибка пакетного скрипта, а проблема с Rscript.exe, я не уверен, что происходит. Вместо использования Rscript.exe, расположенного непосредственно в \bin
, вы должны пойти еще на один шаг и использовать "!PATH!\R-3.0.1\bin\i386\Rscript.exe"
, который работает, скорее всего, потому что я запускаю 32-битную машину, а не 64.
вы должны а) удалить '&' от пути ** или ** б) использовать другой язык скриптов (VBS, Powershell). – Endoro
Обратите внимание, что в показанном коде нет причин использовать отложенное расширение. Вы можете просто использовать обычную замену '% ... %'. –