11

У меня проблема с использованием PSCP в программе на C # для копирования файла с компьютера Unix на компьютер с Windows. Проблема возникает только в том случае, если в целевой папке на компьютере Windows есть пробел. Например, следующее работает нормально: (ПРИМЕЧАНИЕ: IP-адрес и пароль были изменены для этого примера)

pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\download

Но когда я изменю это на это:

pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\download files

Я получаю следующую ошибку: более одного удаленного источника не поддерживается.

Я понимаю, что это потому, что PSCP интерпретирует пространство как другую цель. Но как я могу это сделать? Я пробовал все виды вещей, таких как кавычки и выход из космоса. Я пробовал все следующее, и ничего не работает:

pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files"
pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\"download files"
pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\download\\ files

Есть идеи?

3 ответа3

15

Хотя правильным ответом, вероятно, является использование WinSCP и их библиотеки C #, я нашел способ заставить PSCP работать, когда в целевой папке есть пробел.

Правильный ответ - сделать это:

pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files"

Оказывается, у меня была другая проблема, которая заставляла меня думать, что вышеупомянутое не работает. Первоначально я использовал полный путь к исполняемому файлу PSCP.EXE. Полный путь включал пробелы. Поэтому я пытался сделать следующее:

"C:\My PSCP Folder\pscp.exe" -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files"

И я пытался вызвать это из C #, используя Process.Start(), и это не удалось. Казалось, что он может справиться с этим, если в пути PSCP или в пути назначения есть пробел, но не в обоих. Я исправил это, включив путь к исполняемому файлу PSCP в мои переменные среды Windows. Теперь я могу просто вызвать PSCP.EXE, и он работает с кавычками вокруг целевой папки.

8

Не используйте pscp .

Клиент WinSCP (который построен поверх PuTTY) обеспечивает сборку .NET. Вот пример.

0

Добавить точку в папку назначения. Следующее должно работать с приложением . на вашем примере:

"C:\My PSCP Folder\pscp.exe" -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files\."

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .