2025年03月18日

WindowsコマンドラインでのsFTP操作

コマンドプロンプトを開いて
sftp
と入力。Usageが出てくれは使用可能。

PowerShellで
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*'と入力
Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed
と出てくれは使用可能

使用可能でなければ(管理者のパワーシェルで)
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
でインストールできる。

sFTPの場所は
C:\Windows\System32\OpenSSH\sftp.exe    64Bitの場合
C:\Windows\SysWOW64\OpenSSH\sftp.exe   32bitの場合
インストール状態により、System32にはあるがSysWOW64には無いとかがある。
c:\WINDOWS\system32\cmd.exe はSysWOW64を参照するので見つからないが
PowerShell だとC:\WINDOWS\system32\openssh\sftp.exe は見つけることができたり。
なんだかよくわからんけど。

-----
C++Builderで外部のSFTPクライアント(例: Windows標準のOpenSSH sftpコマンド)をC++コード内から起動し、ファイルをアップロード/ダウンロードする方法(Copilot出力より:動作確認はしていない)

#include <vcl.h>
#include <tchar.h>
#include <cstdlib> // For system()
#pragma hdrstop

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    // SFTPのコマンドラインを構築
    String command = L"sftp user@hostname <<EOF\n";
    command += L"put C:\\local\\file.txt /remote/path/\n";
    command += L"bye\n";
    command += L"EOF";

    // system関数を使用して実行
    int result = system(command.c_str());
    if (result == 0) {
        ShowMessage(L"ファイルが正常にアップロードされました。");
    } else {
        ShowMessage(L"アップロード中にエラーが発生しました。");
    }
}


posted by すら at 11:53| プログラミングなこと