PSCP を使用して、ターゲット パスにスペースが含まれるファイルを Unix マシンから Windows マシンにコピーするにはどうすればよいですか?

PSCP を使用して、ターゲット パスにスペースが含まれるファイルを Unix マシンから Windows マシンにコピーするにはどうすればよいですか?

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"

古い W​​indows ネットブックを分解して部品を取りました。現在使用している Windows マシンはラップトップのみなので、HDD を Ubuntu デスクトップに接続しました。SATA から USB へのアダプタは不要でした。HDD を正しくマウントし、ファイルをナビゲートできましたが、Ubuntu から Windows 10 に転送しようとすると、次の問題が発生しました。

pscp [email protected]:/media/path/to/file.zip "D:\backups

次のような複数のエラーが発生しました。ローカルからローカルへのコピーはサポートされていませんホストが存在しませんなど

保存されたセッションの名前である によって提供される を使用して、問題なくファイルを転送できました。完全なコマンドは次のとおり[OPTION]です。pscp-load sessnamesessname

pscp -load ubuntu@local [email protected]:/media/path/to/file.zip "D:\backups

これにより問題は解決し、この-load sessnameオプションを使用すると、これまで転送しようとしたすべてのファイルとディレクトリで、user@ipaddress形式を使用する場合でも、user@hostnameソース マシンの形式を使用する場合でも機能しました。

これが、Ubuntu マシンを使用して Windows HDD からファイルを復元しようとしている人の役に立つことを願っています。

関連情報