C# Tips之cmd

写在前面

C# Tips是博主开启的第一个项目,以C#为示例语言,旨在普及编程技巧、经典算法以及计算机视觉、图形学知识。

cmd

cmd即命令提示符,采用命令行的形式与用户进行交互,是早期windows系统的一大利器。打开方式为win+R,然后输入cmd即可。经常在以下一些场合中使用:

  1. 运行带参数的exe文件
  2. 查询文件夹中文件信息
  3. 安装python库
  4. 关闭正在运行的进程

运行exe

通常程序的main函数会有两种形式:不带参和带参的。

int main()

int main(int argc,char* argv[])

对于不带参的exe,可以直接双击运行;对于带参的exe,虽然有时候也能够直接双击运行,但是程序可能会一闪而过,不会给出预期的结果。利用cmd可以一次性搞定两类exe,并且可以直观看到exe的运行过程和错误信息(输出到控制台的语句)。假定exe所在路径为D:\CMD\SiftGPU.exe,具体操作方式如下:

  1. 转到D盘:d:
  2. 进入文件夹:cd D:\CMD
  3. 输入参数:SiftGPU.exe -i 图像路径 -o 特征点存储路径 -loweo

查询文件名

在引用C++库时,需要输入大量的lib名称,比如opencv和pcl就有很多lib,一个个复制会十分麻烦,但是利用cmd可以很方面地查询(支持模糊查询)这些lib的名称。还是得先进入这些库所在的文件夹,以pcl库为例:

dir *.lib /b

在这里插入图片描述
其中的通配符*表示任意长度的字符,个数可以为多个,如果只需要release库,则输入:

dir *release.lib /b

在这里插入图片描述

安装python库

由于环境变量中添加了python路径,所以在任意磁盘下都能利用cmd进行python库的安装。直接上代码

pip install python库名

但是默认的下载源可能网速不太给力,点这里会找到一些更快的下载源,代码稍微修改一下

pip install -i 下载源 python库名

关闭进程

一些进程会因为主程序关闭而持续运行(由于主程序关闭无法察觉其是否正在运行),或者遇到错误而停止运行但并未正常关闭导致进程所对应的程序无法删除(例如编译错误时exe的占用)。对于这样的异常进程,我们可以通过Crtl+Alt+Delete进入程序管理器中详细信息选项卡下找到相应进程,并令其强制关闭。但是,有些时候我们需要避开手动操作,换句话说就是为凸显程序的智能性,我们应该把关闭进程的操作写入程序中,这时cmd就是一个好帮手,代码如下:

taskkill /im 进程名称 /f

这里的进程名称不需要加入程序的完整路径,比如上面提到的D:\CMD\SiftGPU.exe,只需要输入SiftGPU.exe。

C#启动cmd

System.Diagnostics.Process提供对本地或远程进程的访问、启动、停止权限,除了能够启动cmd外,还可以直接打开本地文件,例如chm帮助文档。下面给出利用cmd打开D:\CMD\SiftGPU.exe的代码:

System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.WriteLine("cd D:\\CMD");
p.StandardInput.WriteLine("SiftGPU.exe -i " + 图像路径 + " -o " + 特征点存储路径 + " -loweo");
p.StandardInput.AutoFlush = true;
//string str=p.StandardOutput.ReadLine();
p.StandardInput.WriteLine("exit");
p.WaitForExit();
p.Close();

StandardInput.WriteLine用于输入命令行语句,StandardOutput.ReadLine用于读取控制台输出信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 中,可以使用 `Process.Start` 方法来启动一个外部进程,包括启动系统的 cmd.exe 命令行工具。以下是一个简单的示例代码: ```csharp using System.Diagnostics; class Program { static void Main(string[] args) { // 要运行的命令 string command = "path/to/your/file.exe"; // 使用 Process.Start 方法启动 cmd.exe 进程,并传入命令 Process.Start("cmd.exe", "/c " + command); } } ``` 需要注意的是,在启动 cmd.exe 进程时,需要使用 "/c" 参数来传递要执行的命令。另外,如果要传递多个参数,可以将它们拼接成一个字符串,使用空格分隔。 如果需要获取命令执行的结果,可以通过 Process 对象的 StandardOutput 属性来获取输出流,示例如下: ```csharp using System.Diagnostics; class Program { static void Main(string[] args) { // 要运行的命令 string command = "dir"; // 使用 Process.Start 方法启动 cmd.exe 进程,并传入命令 Process process = new Process(); process.StartInfo.FileName = "cmd.exe"; process.StartInfo.Arguments = "/c " + command; process.StartInfo.UseShellExecute = false; process.StartInfo.RedirectStandardOutput = true; process.Start(); // 读取输出流 string output = process.StandardOutput.ReadToEnd(); // 等待进程结束 process.WaitForExit(); Console.WriteLine(output); } } ``` 在这个示例中,使用 `RedirectStandardOutput` 属性来指定输出流要重定向到 Process 对象的 StandardOutput 属性中。然后通过 `ReadToEnd` 方法来读取输出流的内容,并在进程结束后输出到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值