WJMT12138 2024-05-20 17:16 采纳率: 77.8%
浏览 5

C#调用VBS执行sftp指令会显示不是内部或外部指令

C#调用VBS执行sftp指令会显示不是内部或外部指令

img


但是直接双击执行vbs则可以正常执行

img


感觉是环境的问题,网上搜了很多没有找到好的解决办法求解答

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-20 17:16
    关注

    引自免费微信小程序:皆我百晓生

    看起来您在尝试从C#应用程序中通过VBScript(VBS)脚本执行SFTP命令,但在命令提示符中遇到错误,提示sftp不是内部或外部命令。这通常是因为系统路径中未包含SFTP客户端的可执行文件。

    首先,确保您的SFTP客户端(例如PuTTY的Plink或OpenSSH的sftp)已在系统的PATH环境变量中注册。您可以按照以下步骤检查和添加到PATH:

    1. 找出SFTP客户端的完整路径,比如C:\Program Files\PuTTY\plink.exeC:\ProgramData\chocolatey\bin\sftp.exe
    2. 右键点击“此电脑”,选择“属性”。
    3. 在弹出的窗口中选择“高级系统设置”。
    4. 在新窗口中点击“环境变量”按钮。
    5. 在“系统变量”区域找到名为Path的条目,然后点击“编辑”。
    6. 将SFTP客户端的路径添加到列表中,每个路径之间用分号(;)隔开。

    完成上述步骤后,重启计算机使更改生效。

    接下来,我们将编写一个简单的C#代码片段,它将通过VBS脚本来执行SFTP命令。这里我们使用Powershell来执行VBS脚本,因为Powershell提供了更好的错误处理和性能。

    using System;
    using System.Diagnostics;
    
    namespace SftpFromCSharp
    {
        class Program
        {
            static void Main(string[] args)
            {
                // SFTP客户端路径示例(根据实际情况替换)
                string sftpClientPath = "C:\\Program Files\\PuTTY\\plink.exe";
    
                // SFTP服务器、用户名、密码和传输文件的命令行参数
                string server = "192.168.68.156";
                string username = "7043";
                string password = "your_password"; // 替换为实际密码
                string localFilePath = @"D:\Workspace\Jenkins_2R452_Workspace\workspace\TestSpace\GitLab_Build_3_1_ByParams\Debug\F28384S_Geely_SD3A_MC3935_V292.hex";
                string remoteFilePath = "/D:/01.Jenkins/Program/F28384S_Geely_SD3A_MC3935_V292.hex";
    
                // 创建VBS脚本字符串
                string vbscript = @"
                    Set WshShell = CreateObject("WScript.Shell")
                    WshShell.Run """ + sftpClientPath + @""" -batch -l """ + username + @""" -pw """ + password + @""" " + server + @""" -m ""put """ + localFilePath + @""" """ + remoteFilePath + @"""
                ";
    
                // 使用Powershell执行VBS脚本
                using (ProcessStartInfo psi = new ProcessStartInfo())
                {
                    psi.FileName = "powershell.exe";
                    psi.RedirectStandardError = true;
                    psi.RedirectStandardOutput = true;
                    psi.UseShellExecute = false;
                    psi.Arguments = "-NoProfile -ExecutionPolicy Bypass -Command "& { " + Environment.NewLine + vbscript + Environment.NewLine + "}";
    
                    using (Process process = Process.Start(psi))
                    {
                        string output = process.StandardOutput.ReadToEnd();
                        string error = process.StandardError.ReadToEnd();
    
                        if (!string.IsNullOrEmpty(error))
                        {
                            Console.WriteLine("Error occurred:");
                            Console.WriteLine(error);
                        }
                        else
                        {
                            Console.WriteLine("SFTP command executed successfully.");
                            Console.WriteLine(output);
                        }
                    }
                }
            }
        }
    }
    

    这段代码创建了一个VBS脚本,并使用Powershell执行该脚本,这样就可以在C#中执行SFTP命令了。确保替换了正确的SFTP客户端路径、服务器地址、用户名、密码以及文件路径。运行这个C#程序,看看是否解决了问题。如果还有任何错误,请检查输出并进行相应的调试。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月20日

悬赏问题

  • ¥15 matlab支持向量机使用错误
  • ¥99 利用C/C++语言,使用TCP/IP协议,编一个简易聊天程序
  • ¥15 如何使用python 实现对串口/dev/ttyUSB0进行上锁,使得该串口只能在一个python脚本中使用,其他脚本不能操作这个串口
  • ¥15 晶体塑性有限元——Damask求解
  • ¥15 写出这个有没有人能写一下今天中午就要
  • ¥30 设计一个图形用户界面来控制你机械臂的运动
  • ¥30 3d打印机无法识别到SD卡,如何解决?(相关搜索:格式化)
  • ¥15 前端返回pdf时不显示内容
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题