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

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

我在 C# 程序中使用 PSCP 将文件从 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"

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

答案2

不要使用pscp

温SCP客户端(建立在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 上网本,我把它拆开来拆零件。我将硬盘连接到我的 Ubuntu 台式机,因为我目前唯一的 Windows 机器是一台笔记本电脑,而且我不想要一个 SATA 转 USB 适配器。我正确安装了硬盘,可以浏览文件,但是当尝试使用以下方法从 Ubuntu 传输到 Windows 10 时:

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

我收到了多个错误,包括不支持本地到本地的复制主机不存在, ETC。

我能够使用[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 HDD 恢复文件的人。

相关内容