web-dev-qa-db-fra.com

Comment utiliser PSCP pour copier un fichier depuis une machine Unix vers une machine Windows où le chemin cible contient des espaces?

Je rencontre un problème d'utilisation de PSCP dans un programme C # pour copier un fichier d'un ordinateur Unix vers un ordinateur Windows. Le problème ne survient que lorsque le dossier cible sur la machine Windows a un espace. Par exemple, les éléments suivants fonctionnent correctement: (REMARQUE: l'adresse IP et le mot de passe ont été modifiés pour cet exemple)

pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\download

Mais quand je le change en ceci:

pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\download files

J'obtiens l'erreur suivante: Plus d'une source distante non prise en charge.

Je me rends compte que c’est que PSCP interprète l’espace comme une autre cible. Mais comment puis-je le faire? J'ai essayé toutes sortes de choses, comme mettre entre guillemets et échapper à l'espace. J'ai essayé tout ce qui suit et rien ne fonctionne:

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

Des idées?

11
Corey Burnett

Bien que la bonne solution soit probablement d’utiliser WinSCP et leur bibliothèque C #, j’ai trouvé un moyen de faire fonctionner PSCP lorsque le dossier cible contient un espace.

La bonne réponse est de faire ceci:

pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"

Il se trouve que j’avais un autre problème qui me faisait penser que ce qui précède ne fonctionnait pas. A l'origine, j'utilisais le chemin d'accès complet à l'exécutable PSCP.EXE. Le chemin complet incluait des espaces. J'essayais donc de faire ce qui suit:

"C:\My PSCP Folder\pscp.exe" -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"

Et j'essayais d'appeler ça depuis C # en utilisant Process.Start () et ça échouait. Il semblait pouvoir gérer cela s'il y avait un espace dans le chemin PSCP ou le chemin cible, mais pas les deux. J'ai résolu ce problème en incluant le chemin d'accès à l'exécutable PSCP dans les variables de mon environnement Windows. Maintenant, je suis capable d'appeler simplement PSCP.EXE et cela fonctionne avec les guillemets autour du dossier cible.

15
Corey Burnett

N'utilisez pas pscp.

Le client WinSCP (qui repose sur PuTTY) fournit un assembly .NET . Voici un exemple .

8
grawity

Ajouter une période au dossier de destination. Ce qui suit devrait fonctionner avec le modèle ajouté . de votre exemple:

"C:\My PSCP Folder\pscp.exe" -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files\."
0
Matt