Как использовать PSCP для копирования файла с машины Unix на машину Windows, если целевой путь содержит пробелы?

Как использовать PSCP для копирования файла с машины Unix на машину Windows, если целевой путь содержит пробелы?

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

pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\download

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

pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\download files

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

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

pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"
pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\"download files"
pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\download\\ files

Есть идеи?

решение1

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

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

pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"

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

"C:\My PSCP Folder\pscp.exe" -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"

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

решение2

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

TheWinSCPклиент (который построен на основе PuTTY) предоставляетСборка .NET. Вотпример.

решение3

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

"C:\My PSCP Folder\pscp.exe" -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files\."

решение4

У меня возникла та же проблема, я добавил каталог pscp.exeкак переменную PATH для сеанса в cmd.exe:

set PATH="C:\Program Files\PuTTY;%PATH"

У меня был старый нетбук Windows, который я разобрал на запчасти. Я подключил HDD к моему настольному компьютеру Ubuntu, так как моя единственная текущая машина Windows — это ноутбук, и я не хотел покупать адаптер SATA-USB. Я правильно смонтировал HDD и мог перемещаться по файлам, но при попытке перенести данные с Ubuntu на Windows 10 с помощью:

pscp [email protected]:/media/path/to/file.zip "D:\backups

Я получил несколько ошибок, включаяЛокальное копирование не поддерживается,Хост не существует, и т. д.

Мне удалось без проблем передать файл, используя предоставленный [OPTION]вызываемый pscp, -load sessnameгде sessnameимя сохраненной сессии. Полная команда была следующей:

pscp -load ubuntu@local [email protected]:/media/path/to/file.zip "D:\backups

Это решило проблему, и использование этой -load sessnameопции сработало для всех файлов и каталогов, которые я пытался перенести до сих пор, независимо от того, использовал ли я этот user@ipaddressформат или user@hostnameформат исходной машины.

Надеюсь, это поможет кому-то, кто пытается использовать машину с Ubuntu для восстановления файлов с жесткого диска Windows.

Связанный контент