
Ich habe ein Problem bei der Verwendung von PSCP in einem C#-Programm, um eine Datei von einem Unix-Rechner auf einen Windows-Rechner zu kopieren. Das Problem tritt nur auf, wenn der Zielordner auf dem Windows-Rechner ein Leerzeichen enthält. Folgendes funktioniert beispielsweise einwandfrei: (HINWEIS: Die IP-Adresse und das Passwort wurden für dieses Beispiel geändert)
pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\download
Aber wenn ich es folgendermaßen ändere:
pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\download files
Ich erhalte die folgende Fehlermeldung: Mehr als eine Remote-Quelle wird nicht unterstützt.
Mir ist klar, dass das daran liegt, dass PSCP das Leerzeichen als ein anderes Ziel interpretiert. Aber wie kann ich das machen? Ich habe alles Mögliche versucht, z. B. es in Anführungszeichen zu setzen und das Leerzeichen zu maskieren. Ich habe alles Folgende versucht und nichts funktioniert:
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
Irgendwelche Ideen?
Antwort1
Obwohl die richtige Antwort wahrscheinlich darin besteht, WinSCP und die C#-Bibliothek zu verwenden, habe ich einen Weg gefunden, PSCP zum Laufen zu bringen, wenn der Zielordner ein Leerzeichen enthält.
Die richtige Antwort lautet:
pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"
Es stellte sich heraus, dass ich ein anderes Problem hatte, das mich glauben ließ, dass das oben genannte nicht funktionierte. Ursprünglich verwendete ich den vollständigen Pfad zur ausführbaren Datei PSCP.EXE. Der vollständige Pfad enthielt Leerzeichen. Daher versuchte ich Folgendes:
"C:\My PSCP Folder\pscp.exe" -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"
Und ich habe versucht, das von C# aus mit Process.Start() aufzurufen, und es ist fehlgeschlagen. Es schien, als würde es damit umgehen können, wenn entweder im PSCP-Pfad oder im Zielpfad ein Leerzeichen vorhanden war, aber nicht in beiden. Ich habe das behoben, indem ich den Pfad zur PSCP-ausführbaren Datei in meine Windows-Umgebungsvariablen aufgenommen habe. Jetzt kann ich einfach PSCP.EXE aufrufen und es funktioniert mit den Anführungszeichen um den Zielordner.
Antwort2
Nicht verwenden pscp
.
DerWinSCPClient (der auf PuTTY basiert) bietet eine.NET-Assembly. Hier ist einBeispiel.
Antwort3
Fügen Sie einen Punkt an den Zielordner an. Folgendes sollte mit dem angehängten Punkt funktionieren:.zu deinem Beispiel:
"C:\My PSCP Folder\pscp.exe" -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files\."
Antwort4
Ich hatte das gleiche Problem. Ich habe das pscp.exe
Verzeichnis als PATH-Variable für die Sitzung in folgendem Verzeichnis hinzugefügt cmd.exe
:
set PATH="C:\Program Files\PuTTY;%PATH"
Ich hatte ein altes Windows-Netbook, das ich in Einzelteile zerlegt hatte. Ich habe die Festplatte an meinen Ubuntu-Desktop angeschlossen, da mein einziger aktueller Windows-Rechner ein Laptop ist und ich mir keinen SATA-zu-USB-Adapter zulegen wollte. Ich habe die Festplatte richtig eingebunden und konnte durch die Dateien navigieren, aber beim Versuch, von Ubuntu auf Windows 10 zu übertragen, geschah Folgendes:
pscp [email protected]:/media/path/to/file.zip "D:\backups
Ich habe mehrere Fehlermeldungen erhalten, darunterLokales zu lokales Kopieren wird nicht unterstützt,Host existiert nicht, usw.
Ich konnte die Datei problemlos übertragen, indem ich den [OPTION]
bereitgestellten Befehl pscp
verwendete, -load sessname
wobei sessname
der Name einer gespeicherten Sitzung ist. Der vollständige Befehl lautete wie folgt:
pscp -load ubuntu@local [email protected]:/media/path/to/file.zip "D:\backups
Dadurch wurde das Problem gelöst und die Verwendung der -load sessname
Option hat für alle Dateien und Verzeichnisse funktioniert, die ich bisher zu übertragen versucht habe, unabhängig davon, ob ich das user@ipaddress
Format oder das user@hostname
Format für den Quellcomputer verwende.
Hoffentlich hilft dies jemandem, der versucht, mit einem Ubuntu-Rechner Dateien von einer Windows-Festplatte wiederherzustellen.