我在 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 并且它可以与目标文件夹周围的引号一起使用。
| 归档时间: |
|
| 查看次数: |
139507 次 |
| 最近记录: |