我在 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
答案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 恢复文件的人。