Путь к файлу Rscript с пробелом

Я пытаюсь запустить следующий R-скрипт в оболочке Windows:

Rscript C:/Documents/Folder name containing space/myscript.txt

В этом случае я получаю сообщение об ошибке:

Fatal error: cannot open file 'C:/Documents/Folder': No such file or directory

Однако, когда я использую кавычки (пробовал одинарные, двойные и тройные, как было предложено в других сообщениях), я получаю следующую ошибку:

Rscript "C:/Documents/Folder name containing space/myscript.txt"
The filename, directory name, or volume label syntax is incorrect.

Я не могу найти способ обойти проблему с пространством, и изменение местоположения файла, чтобы не было пробелов, для меня не вариант.

Любая помощь будет принята с благодарностью.

Дополнительные пояснения:

Проблема, с которой я сталкиваюсь, напрямую не связана с R, а скорее с тем, что путь к файлу, содержащий пробелы, передается в Rscript.

В документации Rsript следует использовать следующим образом:

Rscript [options] [-e expr [-e expr2 ...] | file] [args]

Также отмечается, что:

Пробелы разрешены в выражении и файле (но их необходимо защитить от используемой оболочки, если таковая имеется, например, заключив аргумент в кавычки).

Однако попытка заключить путь к файлу в кавычки приводит к ошибке

The filename, directory name, or volume label syntax is incorrect.

Во избежание путаницы запуск Rscript C:/Documents/Folder_name/myscript.txt работает нормально, если путь не содержит пробелов, как Rscript "C:/Documents/Folder_name/myscript.txt".


person Gabriel Olshansky    schedule 31.01.2018    source источник
comment
Будет ли это Rscript C:/Documents/Folder\\ name\\ containing\\ space/myscript.txt?   -  person lit    schedule 31.01.2018
comment
Откройте окно командной строки и запустите cmd /?. Последний абзац на последней странице справки, выводимой в окно консоли (не окно оболочки), объясняет, что аргумент имени файла должен быть заключен в двойные кавычки, если он содержит пробел или один из этих символов &()[]{}^=;!'+,`~. А разделителем каталогов в Windows является символ обратной косой черты \. Не знаю, ожидает ли Rscript в Windows имена файлов, тем не менее, с /, как в Unix/Linux/Mac. Rscript.exe "C:\Documents\Folder name containing space\myscript.txt" может сработать. (Я не мог проверить это, потому что Rscript не установлен.)   -  person Mofi    schedule 01.02.2018
comment
Спасибо, что посмотрели, но это не решает проблему. Проблема, с которой я сталкиваюсь, связана не с самим R, а с передачей пути к файлу оболочкой. использование "file path" не работает, возвращается The filename, directory name, or volume label syntax is incorrect.. Я ищу способ для оболочки передать путь к файлу, который включает пробелы. В документации указано, что пробелы разрешены в выражении и файле (но их необходимо защитить от используемой оболочки, если таковая имеется, например, заключив аргумент в кавычки). что не т вроде работает.   -  person Gabriel Olshansky    schedule 01.02.2018
comment
@rashid и @lit с использованием \\ не решают проблему, вместо этого возвращая C:/Documents/Folder\\' is not recognized as an internal or external command, operable program or batch file   -  person Gabriel Olshansky    schedule 01.02.2018
comment
Вы пробовали заключить путь к файлу в кавычки? Таким образом, 1_   -  person Steven    schedule 01.02.2018
comment
@Steven Да, я пробовал это, и я получаю сообщение The filename, directory name, or volume label syntax is incorrect.   -  person Gabriel Olshansky    schedule 01.02.2018
comment
@Mofi Это исполняемый файл (.exe).   -  person Gabriel Olshansky    schedule 01.02.2018
comment
@GabrielOlshansky На мой взгляд, rscript.exe имеет ошибку, если не поддерживает в Windows "C:\Documents\Folder name containing space\myscript.txt" с разделителем каталогов Windows или "C:/Documents/Folder name containing space/myscript.txt" с разделителем каталогов Unix/Linux/Mac. Вы можете дополнительно попробовать "C:\\Documents\\Folder name containing space\\myscript.txt". Но если и это не сработает, вам лучше связаться с автором Rscript и сообщить об этой ошибке, а тем временем использовать короткий путь/имя файла 8.3 для обхода этой ошибки.   -  person Mofi    schedule 01.02.2018
comment
@GabrielOlshansky Последняя попытка будет "'C:/Documents/Folder name containing space/myscript.txt'". Интерпретатор командной строки Windows cmd.exe не поддерживает ' для заключения аргумента в кавычки с пробелами, как интерпретаторы оболочки Linux, такие как bash, sh или ksh. Поэтому в Windows необходимо использовать двойные кавычки для строки аргумента с пробелами. Но, возможно, Rscript написан настолько плохо, что корректно интерпретирует только имена файлов с пробелами, заключенными в '. А поскольку Rscript перенесен из Unix, может помочь использование в качестве первого аргумента --, а в качестве второго аргумента имя файла, заключенное в ".   -  person Mofi    schedule 01.02.2018
comment
@Mofi Я пробовал все это, но все равно получаю то же сообщение. Я думаю, что вы правы, я собираюсь сообщить об ошибке. Спасибо за всю помощь, я обновлю пост, когда получу ответ от них.   -  person Gabriel Olshansky    schedule 01.02.2018
comment
@GabrielOlshansky, вы получили какие-либо результаты, сообщив об ошибке? У меня точно такая же проблема после обновления до R 3.5.0. У меня никогда не было этой проблемы раньше! не могу запустить Rscript с пробелами в именах папок и файлов.   -  person Ankhnesmerira    schedule 14.05.2018


Ответы (4)


Это ОШИБКА в R версии 3.5.0 для Windows.
Одним из обходных путей, помимо понижения версии, является создание сценария R без пробелов в пути и запуск сценария с интервалами с source():

## C:\Documents\Folder-name-no-space\myscript.txt
source("C:/Documents/Folder name containing space/myscript.txt")

Затем вы запускаете его с помощью:

Rscript C:\Documents\Folder-name-no-space\myscript.txt

или также:

Rscript C:/Documents/Folder-name-no-space/myscript.txt

Вы также можете попробовать имя файла 8.3. Вы можете получить его с помощью:

for %I in ("C:/Documents/Folder name containing space/myscript.txt") do @echo %~sI

ОБНОВИТЬ

Начиная с 3.5.1 проблема исправлена.

person antonio    schedule 29.05.2018

Прямая косая черта отлично работает с R, так что не беспокойтесь о обратной косой черте. Я только что проверил, и на терминале CMD.exe в Windows 8.1 работает следующее:

C:\Windows\System32> Rscript "C:/Users/hb/folder with spaces/script.R"
[1] "1+2+3"

C:\Windows\System32>

Я думаю, что у вас неправильный путь. Если это несуществующий путь, вы получите:

C:\Windows\System32> Rscript --vanilla "C:/Users/hb/folder with spaces/non-existing.R"
Fatal error: cannot open file 'C:/Users/hb/folder with spaces/non-existing.R': No such file or directory

Вы можете проверить это из R, например.

> file.exists("C:/Users/hb/folder with spaces/script.R")
[1] TRUE
person HenrikB    schedule 01.02.2018

Простое решение: установите более новую версию R.

Из примечаний к выпуску версии 3.5.1 соответствующая ошибка Исправление описано здесь:

Разрешить файловый аргумент Rscript включать пробел, даже если он находится первым в командной строке.

person Mike T    schedule 20.03.2019

Другим удобным обходным решением было создание псевдонима для части пути, которая содержит пробелы, т.е.:

SUBST k: "c:\Folder with Spaces"
rscript k:\scripts\program.R
person tbransgrove    schedule 27.06.2018