命令行参考

命令行与编程参考文档

前言

为什么要学命令行?不会命令行的程序猿怎能叫程序猿呢?

命令行超轻量级编程体验!你值得拥有!

基础篇

命令行是什么?

按下热键组合【 Win + R 】 调出【运行】窗口:

//至于【Win】键就是【开始】键,按下以后能调出【开始菜单】

输入cmd,然后确定(or 回车)

这样cmd(命令提示符)程序就被打开了,看标题:

管理员:C:\Windows\system32\cmd.exe

这是指【以管理员权限使用程序】,

后面的【C:\Windows\system32\cmd.exe】则是指cmd.exe的路径(位置)

一开始会显示:

Microsoft Windows [版本 6.1.7601]

版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

这是cmd运行初始显示的内容,相当于cmd自身的属性。类似【关于】。

    包括版本号等等,然而也有一些计算机上的cmd是英文版的,这种语言不在我们的讨论范围之内。

接下来:

C:\Users\zccz>

这是回声echo,默认输出当前路径。//即当前cmd在何处运行。

//所谓"回声"的概念,来源于"保留",比如说喊了一句"你个傻X"之后再喊//一句"去shi吧!"之后会有回声"你个傻X去shi吧"这样。大致感觉一下就//好,这并不重要。

命令行基本操作

    命令行中【命令】种类繁多,但也有一些基本的语法:

如果我们随意输入一个命令,它通常不是系统已经定义好的命令,于是就会显示这个:[Command] 不是内部或外部命令,也不是可运行的程序或批处理文件。

那么问题就来了:

    什么是内部命令外部命令可运行的程序以及批处理文件

通常将内部命令理解为cmd预定义的命令:如cd、dir等

通常将外部命令理解为由外部导入的拓展命令工具集合(暂时不提这个)。

可运行的程序:这涉及到一个非常基本的语法:

输入命令a,会运行这个目录(C:\Users\zccz\)下的a.exe文件,如图

//这个a.exe是我以前编写的一个简单C程序,输出"Hey!\n"。

//这样你就可以知道,如果要运行程序,应当输入什么命令了。

命令格式:

    [drive:][path][filename(.exe)]

//这个.exe的后缀名可加可不加,在同一目录下,同名的文件优先运行exe文件:

//如同一目录下有a.exe与a.bat两种文件,输入命令a,cmd会运行a.exe而不是a.bat

这个后缀名为bat的文件就是第4个可以直接运行的东西——批处理文件

    关于这个,就是差不多一次性按顺序执行一堆命令的意思,批处理的语法我们在后面介绍。现在先跳过。

命令行基本命令

关于命令行,我们最常用的命令如下:

    dir        显示目录中的文件和子目录列表。

解释一下:前两列是【最后修改时间】,第三列是【文件性质】(DIR表示是一个目录,也称文件夹,如果没有DIR标识则是一个文件),第四列是【文件大小】(文件夹不显示大小),第五列是【文件名】

//DIR是我们通过cmd观察计算机文件结构的一种方法,是我们的"眼"。

//DIR——Direction

    cd        显示当前目录名或改变当前目录。

//CD——Change Direction

//CD是我们通过cmd访问计算机文件目录的方法,是我们的"腿"。

命令用法:        cd [direction]

通常配合DIR使用("走路要看路",然而当你闭着眼睛也能走的时候你就可以脱离DIR了)

就这样先看一下这个目录下有什么(比如说有一个DIR叫Desktop),然后再用cd命令移动到这个目录下(cd Desktop),然后还可以再用一次DIR查看Desktop目录下的文件:

然而我的Desktop非常的干净,没有任何的文件。

//实际上,从名字上也可以看出,这个Desktop文件夹里的内容就是桌面上的内容。

那么这个目录【.】与【..】是什么鬼?

【.】    当前目录

【..】    上级目录(父目录)

如使用命令:    cd ..    则会返回上一级目录

                cd ..\..    则会返回上上级目录

    start        启动一个单独的窗口运行指定的程序或命令。

        首先介绍一种用法来承接上面提到的内容。

        命令    start .        用资源管理器打开当前目录

//    "."是一个对象,是指向当前目录的,默认用"资源管理器"打开,

//    其他对象也是可以的,你甚至可以start cmd来打开另一个cmd窗口。

start真是功能强大,它可以用默认程序打开文件,如start a.txt,那么它会调用【记事本】(或者其他默认程序)来打开a.txt。

你可能会发现,直接输入a.txt也能打开a.txt,那么加上start的区别在哪呢?start会调用另一线程去处理这个新的任务(然而这点你通常是察觉不到的,只有在多开的情况,如批处理时能体会到)。另外如果你想打开一个未定义默认程序的文件:如图中的TEST文件,系统并不知道用什么打开它。。

输入TEST的情况:

输入 start TEST的情况,会试图打开文件。

从这点上看,用start更贴*我们*时使用的【打开文件】。

    cls        清除屏幕。

        //cls——CLear Screen

        //如题,如果觉得屏幕太乱了,就用cls清除一下吧。

然而命令行远远不止这点功能,然而一个个讲又过于费事,而且暂时也没有什么卵用。先谈谈如何自学命令行吧。

如何自学命令行?

cmd有较为完整的参考文档,输入命令help,你将看到一大堆命令及他们的简介。在最后"有关工具的详细信息,请参阅联机帮助中的命令行参考。"说明命令行的参考文档不止这么一点。

如果对某个命令想更深入地了解用法的话:

    输入 help [Command]或[Command] /?    即可查看该命令的用法了。

如dir:可以输入help dir 或者 dir /?    查看dir的用法。

首先第一句会给出语法:

DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]

[/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]

解释:

  1. 带[]的是"可选参数",可填可不填,不填则会采用默认设置。
  2. drive: 是驱动器号,如C盘(C:),D盘(D:)
  3. path是路径,如Users\zccz
  4. filename是文件名,也可以是文件夹的名字……
  5. 其他[/A],[/B]…[/4]都是相对应的拓展开关,能够更清楚地命令系统。

这样去学习一些命令就非常轻松啦!在【进阶篇】的【命令集】中我会介绍各种命令的基本用途,各位可以挑有兴趣的自己研究啦,另外也不要忘记自行百度。

如何使用命令行编译运行我的程序?

终于到了重点,如何用命令行来编译运行我的程序?这些都是在熟悉cmd基本命令以后才能熟练使用的,所以前面有较长的铺垫。

以Windows用户的C/C++为例,我们谈谈怎么在命令行中编译/运行 程序

  1. 准备C/C++编译器一只,基本上用MinGW(Mini Gcc for Windows),这是Windows用户的C/C++编译器的名字,而什么C-Free、Dev-C++等则是IDE(集成开发环境),Visual Studio表面是个IDE,但它也自行开发了编译器。

如何获取编译器?

方法一:若你曾经安装过IDE,如C-Free、Dev-C++等,你可以在它的安装目录找到MinGW,将整个MinGW拷贝出来,放到一个独立的地方,要注意,一个完整的MinGW至少应该包括bin、include等目录,检查bin文件夹中是否有gcc.exe、g++.exe。

方法二:在Internet上获取编译器,下载MinGW,选择安装版的或者免安装版的都是可以的。

百度云分享:

MinGW4.9.1     http://pan.baidu.com/s/1ntKIWeX     150.53MB

MinGW3.4.5    http://pan.baidu.com/s/1hqEh6CG     19.78MB

C-Free            http://pan.baidu.com/s/1c0Gr6t6    13.97MB

(MinGW3.4.5是我从C-Free中拷出来的,不知道是什么黑科技压缩)

这里给出两个版本的MinGW,可以的话尽量下载新的,虽然旧的也凑合着能用,如果网速实在太渣就用3.4.5的吧。

 

  1. 如C:\Users\zccz\code\

    找到bin目录的路径,(通常是mingw\bin)

    复制bin目录的完整路径:C:\Users\zccz\code\mingw\bin

    【运行】SystemPropertiesComputerName(更改系统设置)

    【高级】→【环境变量…】

    在系统变量中找到【Path】→【编辑】

    在Path的最后加上一句C:\Users\zccz\code\mingw\bin;即可

    要注意已有Path变量最后不一定有";"结尾!如果最后没有分号,要先补上分号!

    【确定】→【确定】→【确定】,完成环境变量的配置

  2. 运行cmd,输入命令g++

如果输入g++显示"'g++' 不是内部或外部命令,也不是可运行的程序或批处理文件。"则说明环境变量配置错误,需要返回上一步重新配置。

如果显示"no input files"则说明你成功了,可以进行编译了。

  1. 用cd命令进入存放源代码的目录(后称【代码目录】,因此我建议将源代码存放在与初始目录相*的位置,这样方便进入代码目录),然后输入命令:

    g++ [filename]

    如我在code目录下有一个名为20.cpp的C++源码文件,则我命令:

    g++ 20.cpp        之后g++编译器开始编译,编译时标题尾部会出现

    -g++ 20.cpp    的字样,说明g++程序已加载,运行中,此时还会锁定键盘输入(然而使用start g++ 20.cpp则不会锁死键盘,而是并行处理)。

    待编译完毕后,下一行回声echo出现,同时释放键盘输入。

    此时目录中会多出一个a.exe,这个就是编译(包括连接)的结果,可以输入命令a来运行这个a.exe(即运行你所编的程序)

  2. 那么用什么编辑cpp文件呢?

    用系统自带的记事本【notepad】可以勉强进行代码编辑,然而缩进也好,加亮也好,notepad本身在被制作的时候就没有这样的需要。因此它不适合用于编写代码。

    这里我们推荐【notepad++】,这是一款为程序猿定制的notepad,简洁大方,没有繁复的启动预算,打开便捷……谁用谁知道。关于notepad++的下载地址,百度【notepad++】第一条就可以。

  3. 刚刚安装好的notepad++被程序猿们普遍认为不是很好看(我个人也是这么想的),所以需要配置一番。

    【设置】→【语言格式设置…】

    如果说简单地配置的话我个人使用这样一个配色方案:

    然而你们可以自己研究一下配色,不过字体一般都使用Courier New这种等宽字体,这样便于代码对齐,比较好看。字体大小随意了,在代码编辑的时候可以使用【Ctrl+鼠标滚轮】来调节大小。

    完成以后,保存并关闭,接下来配置【首选项】

    首选项里面有很多神奇的设置你们可以尝试一下,不过先让我们看一下这几个方面的配置:

    1. 新建,默认语言C++
    2. 默认目录:默认路径改为你自己的代码目录。
  4. 完毕,现在你可以在notepad++上编辑自己的代码然后使用g++编译它了,Enjoy it!

Hello World样例示范

打开notepad++,输入代码如下:

#include <iostream>

using namespace std;

 

int main(){

    cout<<"Hello World!"<<endl;

    return 0;

}

 

保存为cpp文件,注意不要错误地保存为h文件

如果保存为1.cpp,在代码目录里就有一个1.cpp文件了

这个图标也会变成蓝色,说明文件已保存。(若是红色说明未保存)

然后运行cmd,进入代码目录,输入g++ 1.cpp,待编译完毕,输入a即可运行。

进阶篇

编译开关

首先说明一下编译开关是什么概念:

    编译本身有很多的选项,比如你想怎么编译,可以告诉编译器具体的编译模式。比如说,我想生成myprogram.exe而不是a.exe(a.exe是g++默认生成的可执行文件名)。编译开关的设定可以造出很多很有趣的现象。

这里给出一篇博文,以供各位参考,讲得挺好的。

http://blog.csdn.net/woshinia/article/details/11060797

g++有许多编译开关挺常用的,如-o,-O2等等,下面来演示一番。

-o:自定义输出开关

    g++ -o [filename] [cppfile]

将cppfile编译生成程序,名为filename

如g++ -o hehe.exe 27.cpp

这样,在这个目录下就会产生一个hehe.exe,输入命令hehe即可运行程序。

这个命令主要起到了重命名的作用,其他方面倒也没有什么卵用。

-O2:编译优化开关

    g++ [cppfile] [-O2]

将cppfile以O2优化编译,编译器会用黑科技优化代码,提升代码运行效率。

如g++ 27.cpp –O2

这样经过优化的程序运行起来会更快,至于具体快多少就要看实际情况了,不过经过用户体验,似乎是快了几倍的样子……(不得了不得了)。

重定向与管道

这个主要是程序的输入输出问题。

如何从文件中读取数据?如何将输出写入文件?

其中方法之一就是在c++源码中使用文件读写相关的函数。

然而一旦确定,改动读写方式就需要修改代码重新编译,略有不便。

在这里,使用Windows命令行的重定向与管道的相关功能,我们可以在不修改代码的情况下自由选择文件输入输出或者键盘输入输出。

重定向:

重定向的命令语法更像是一个运算符。

主要使用这三种符号:"<"、">"、">>"。

输入符    "<"

a.exe < inputfile

将inputfile中的内容输入到a.exe中,运行a.exe。即将inputfile作为a.exe的输入文件。

这样做有什么优点呢?

  1. 在处理大量输入的时候无须手打,debug的时候无须一次次复制,直接将输入保存在文件中,然后将文件输入即可。
  2. 输入输出的内容不会混在一起。

    这里举个例子说明一下。

    这里有一个已经编写好的程序a.exe

    以及一个输入:

    6 8 5 3 5 2 6 4

    5 6 0 0

     

    8 1 7 3 6 2 8 9 7 5

    7 4 7 8 7 6 0 0

     

    3 8 6 8 6 4

    5 3 5 6 5 2 0 0

     

    0 0

     

    -1 -1

    不使用文件的情况:一边输入一边输出,输入&输出会混在一起。

然而我嫌输入过多,打起来麻烦,于是我把输入存放在一个文件中(a.in)

然后键入命令:a<a.in(这其实是a.exe < a.in的缩写)

这样就只产生了输出,界面非常简洁。

输出符 ">"

    重定向到文件开头输出。

    效果是覆写文件,无视文件之前的内容,意思就是输出文件的原有内容会消失。

    如果目标输出文件不存在,将会创建之(然而输入文件不存在并不会创建)。

a.exe > outputfile

    将a.exe输出到outputfile中

如现有一个Hello World的程序a.exe

那么键入命令

a.exe > my.out

这样,屏幕上不会显示Hello World!,然而我们可以看到目录中有一个my.out文件,这个后缀名并没有默认程序能打开(然而你也可以自行设置默认程序),但它本质是一个文本文件,那么可以使用type命令来在屏幕上输出my.out的内容:

type my.out

输出符    ">>"

将输出重定向到文件末尾。

与">"的区别是,这样输出,不会覆盖原文件的内容,而是在文件末尾输出新的内容。其他方面与">"一致。

复杂的重定向混搭向

如果一个程序既要输入又要输出,或者一个程序的输入由另外一个程序的输出给出……如何解决呢?

首先,命令是一个句子。这个句子只能有一个主体,其他都是附属的。即命令的开始应该代表这个命令的主体,通常也是这句命令的最后执行的程序。还是举个例子。

    问题:将a.in文件中的内容输入到a.exe中,运行结果输出到a.out中。

    命令:a.exe < a.in > a.out

    问题:将b.exe的运行结果输入到a.exe中,运行结果显示在屏幕上。

    命令:a.exe < b.exe

    问题:将b.exe的运行结果输入到a.exe中,运行结果输出到a.out。

    命令:a.exe < b.exe >a.out

    问题:将b.in输入到b.exe,并将结果输出到a.exe,再将a.exe的运行结果输出到a.out(注意下面<、>的匹配,会优先匹配外层<>而不是内层,如果搞不清楚可以加括号来注明,不过也要注意括号与文件名之间要留空格)

    命令1:a.exe < b.exe < b.in > a.out

    命令2:a.exe < ( b.exe < b.in ) > a.out这个命令2也体现了<>的匹配关系。

    错误命令:a.exe <(b.exe <b.in)> a.out这是因为系统找不到 "(b.exe"与"b.in)"文件。

    然而有趣的一点是:即便你加了括号,cmd也似乎视而不见,我行我素。

所以,括号还是不要加了,命令2仅供理解<>匹配。

命令集

ASSOC 显示或修改文件扩展名关联。

//用于更改某文件的默认程序,如.mp3的文件用哪一个播放器打开可以用这个命//令设置

ATTRIB 显示或更改文件属性。

    //利用这个命令可以实现隐藏/显示文件等功能。

BREAK 设置或清除扩展式 CTRL+C 检查。

//这个命令在Windows系统里没有什么卵用。

BCDEDIT 设置启动数据库中的属性以控制启动加载。

    //这个命令用于控制系统启动器boot,慎用。

CACLS 显示或修改文件的访问控制列表(ACL)。

    //这个命令用于控制对(文件/文件夹)的读、写等权限。

CALL 从另一个批处理程序调用这一个。

    //批处理相关,日后再提

CD 显示当前目录的名称或将其更改。

    //这个命令用于更改当前目录,起到【移动】的效果。

CHCP 显示或设置活动代码页数。

    //如题,不明白活动代码页数请跳过

CHDIR 显示当前目录的名称或将其更改。

    //如题,能更改当前目录的名称(改名),与cd不同,cd不改变目录名,

//而chdir能改

CHKDSK 检查磁盘并显示状态报告。

    //有时候U盘插入后提示要修复就是这个命令的一个拓展了

CHKNTFS 显示或修改启动时间磁盘检查。

    //有计划地进行磁盘扫描

CLS 清除屏幕。

CMD 打开另一个 Windows 命令解释程序窗口。

//cmd之间会产生堆栈现象

//大家来找茬……

然而真正的打开另一个 Windows 命令解释程序窗口的写法是:

        start cmd

COLOR 设置默认控制台前景和背景颜色。

    //如果你厌倦了黑底白字,你可以研究一下这个命令。

COMP 比较两个或两套文件的内容。

COMPACT 显示或更改 NTFS 分区上文件的压缩。

CONVERT 将 FAT 卷转换成 NTFS。您不能转换

当前驱动器。

COPY 将至少一个文件复制到另一个位置。

DATE 显示或设置日期。

DEL 删除至少一个文件。

DIR 显示一个目录中的文件和子目录。

DISKCOMP 比较两个软盘的内容。

DISKCOPY 将一个软盘的内容复制到另一个软盘。

DISKPART 显示或配置磁盘分区属性。

DOSKEY 编辑命令行、调用 Windows 命令并创建宏。

DRIVERQUERY 显示当前设备驱动程序状态和属性。

ECHO 显示消息,或将命令回显打开或关上。

ENDLOCAL 结束批文件中环境更改的本地化。

ERASE 删除一个或多个文件。

EXIT 退出 CMD.EXE 程序(命令解释程序)。

FC 比较两个文件或两个文件集并显示它们之间的不同。

FIND 在一个或多个文件中搜索一个文本字符串。

FINDSTR 在多个文件中搜索字符串。

FOR 为一套文件中的每个文件运行一个指定的命令。

FORMAT 格式化磁盘,以便跟 Windows 使用。

FSUTIL 显示或配置文件系统的属性。

FTYPE 显示或修改用在文件扩展名关联的文件类型。

GOTO 将 Windows 命令解释程序指向批处理程序

中某个带标签的行。

GPRESULT 显示机器或用户的组策略信息。

GRAFTABL 启用 Windows 在图形模式显示扩展字符集。

HELP 提供 Windows 命令的帮助信息。

ICACLS 显示、修改、备份或还原文件和

目录的 ACL。

IF 在批处理程序中执行有条件的处理过程。

LABEL 创建、更改或删除磁盘的卷标。

MD 创建一个目录。

MKDIR 创建一个目录。

MKLINK 创建符号链接和硬链接

MODE 配置系统设备。

MORE 逐屏显示输出。

MOVE 将一个或多个文件从一个目录移动到另一个目录。

OPENFILES 显示远程用户为了文件共享而打开的文件。

PATH 为可执行文件显示或设置搜索路径。

PAUSE 停止批处理文件的处理并显示信息。

POPD 还原由 PUSHD 保存的当前目录上一次的值。

PRINT 打印一个文本文件。

PROMPT 改变 Windows 命令提示。

PUSHD 保存当前目录,然后对其进行更改。

RD 删除目录。

RECOVER 从损坏的磁盘中恢复可读取的信息。

REM 记录批处理文件或 CONFIG.SYS 中的注释。

REN 重新命名文件。

RENAME 重新命名文件。

REPLACE 替换文件。

RMDIR 删除目录。

ROBOCOPY 复制文件和目录树的高级实用程序

SET 显示、设置或删除 Windows 环境变量。

SETLOCAL 开始用批文件改变环境的本地化。

SC 显示或配置服务(后台处理)。

SCHTASKS 安排命令和程序在一部计算机上按计划运行。

SHIFT 调整批处理文件中可替换参数的位置。

SHUTDOWN 让机器在本地或远程正确关闭。

SORT 将输入排序。

START 打开单独视窗运行指定程序或命令。

SUBST 将驱动器号与路径关联。

SYSTEMINFO 显示机器的具体的属性和配置。

TASKLIST 显示包括服务的所有当前运行的任务。

TASKKILL 终止正在运行的进程或应用程序。

TIME 显示或设置系统时间。

TITLE 设置 CMD.EXE 会话的窗口标题。

TREE 以图形显示启动器或路径的目录结构。

TYPE 显示文本文件的内容。

VER 显示 Windows 的版本。

VERIFY 告诉 Windows 验证文件是否正确写入磁盘。

VOL 显示磁盘卷标和序列号。

XCOPY 复制文件和目录树。

WMIC 在交互命令外壳里显示 WMI 信息。

 

批处理基础

原文地址:https://www.cnblogs.com/zccz14/p/4588634.html