
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
使用しないでくださいpscp
。
のウィンSCPクライアント(PuTTY上に構築)は、.NET アセンブリ. これは例。
答え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 ネットブックを分解して部品を取りました。現在使用している Windows マシンはラップトップのみなので、HDD を Ubuntu デスクトップに接続しました。SATA から USB へのアダプタは不要でした。HDD を正しくマウントし、ファイルをナビゲートできましたが、Ubuntu から Windows 10 に転送しようとすると、次の問題が発生しました。
pscp [email protected]:/media/path/to/file.zip "D:\backups
次のような複数のエラーが発生しました。ローカルからローカルへのコピーはサポートされていません、ホストが存在しませんなど
保存されたセッションの名前である によって提供される を使用して、問題なくファイルを転送できました。完全なコマンドは次のとおり[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 からファイルを復元しようとしている人の役に立つことを願っています。