如何使用 PSCP 将文件从 Unix 机器复制到目标路径有空格的 Windows 机器?

Cor*_*ett 15 c# scp

我在 C# 程序中使用 PSCP 将文件从 Unix 机器复制到 Windows 机器时遇到问题。只有当 Windows 机器上的目标文件夹中有空格时才会出现问题。例如,以下工作正常:(注意:此示例的 IP 地址和密码已更改)

pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\download
Run Code Online (Sandbox Code Playgroud)

但是当我把它改成这样时:

pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\download files
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:不支持多个远程源。

我意识到这是因为 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
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Cor*_*ett 22

虽然正确的答案可能是使用 WinSCP 和他们的 C# 库,但我确实找到了一种方法,当目标文件夹中有空格时让 PSCP 工作。

正确的答案是这样做:

pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files"
Run Code Online (Sandbox Code Playgroud)

事实证明,我遇到了另一个问题,使我认为上述方法不起作用。最初我使用的是 PSCP.EXE 可执行文件的完整路径。完整路径包含空格。所以我试图做以下事情:

"C:\My PSCP Folder\pscp.exe" -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files"
Run Code Online (Sandbox Code Playgroud)

我试图使用 Process.Start() 从 C# 调用它,但它失败了。如果 PSCP 路径或目标路径中有空格,它似乎可以处理它,但不能同时处理。我通过在我的 Windows 环境变量中包含 PSCP 可执行文件的路径来解决这个问题。现在我可以只调用 PSCP.EXE 并且它可以与目标文件夹周围的引号一起使用。


use*_*686 12

不要使用pscp.

所述的WinSCP客户端(其是建立在腻子的顶部)提供的.NET组件。这是一个例子