質問: pscpを使用して、ターゲットパスにスペースがあるunixマシンからwindowsマシンにファイルをコピーする方法 c#プログラムでpscpを使用して、unixマシンからwindowsマシンにファイルをコピーするときに問題が発生します。この問題は、windowsマシンのターゲットフォルダにスペースがある場合にのみ発生します。たとえば、次のコードは正常に機能します(注:この例ではipアドレスとパスワードが変更されています)。pscp.exe -pw mypassword root@127.0.0.1:/etc/myfolder/myfile.opt c:\download しかし、これを次のように変更すると、pscp.exe -pw mypassword root@127.0.0.1:/etc/myfolder/myfile.opt c:\download files 次のエラーが表示されます。複数のリモートソースがサポートされていません。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 何か案は?
回答: 適切な答えはおそらくwinscpとそのc#ライブラリを使用することですが、ターゲットフォルダーにスペースがあるときにpscpを機能させる方法を見つけました。正解はこれを行うことです:pscp.exe -pw mypassword root@127.0.0.1:/etc/myfolder/myfile.opt "c:\download files" 上記の方法ではうまくいかないと私に思わせる別の問題があったことがわかりました。元々、私はpscp.exe実行可能ファイルへのフルパスを使用していました。フルパスにはスペースが含まれています。だから私は次のことをやろうとしました:"c:\my pscp folder\pscp.exe" -pw mypassword root@127.0.0.1:/etc/myfolder/myfile.opt "c:\download files" そして私はprocess.start()を使用してc#からそれを呼び出そうとしていましたが、失敗しました。 pscpパスまたはターゲットパスのいずれかにスペースがあり、両方にはスペースがない場合は、それを処理できるように見えました。 windows環境変数にpscp実行可能ファイルへのパスを含めることで、これを修正しました。これで、pscp.exeを呼び出すだけで、ターゲットフォルダーの前後の引用符で動作します。