• 温故知新,Windows命令知多少,学习Command Shell和PowerShell


    背景

    在搭建DevOps流水线的时候,如果遇到Windows构建环境,我们或多或少需要用到CMD命令或Batch Script,每次到用的时候总觉得知识匮乏,记录下。

    常用命令

    清除屏幕(cls)

    Clear Screen

    将输入命令的cmd窗口显示的字符全部清除

    cls
    

    image

    改变目录(cd)

    Change Directory

    cd,是在Unix、类Unix、Windows和DOS操作系统下用于改变工作目录的命令行命令。在Unix的Shell脚本与Windows或DOS的批处理文件中亦可使用。

    通过cd命令,可以前进到子目录、后退到父目录、回到根目录(Unix下为/,DOS下为\)或者进入到任何给出的目录中去。

    例如:

    ls
    cd Music
    

    image

    应注意的一点是,在不同的操作系统中,如果不给出变量会让cd产生不同的结果。例如,如果在DOS下不给出变量而执行,会显示出当前的工作目录来;而在Unix下不给出变量而执行,则会返回到起始目录去。在脚本或批处理内执行的cd,也会产生不同的结果。在DOS中,批处理文件中使用的该命令可以直接改变调用者的当前目录;而在Unix下,使用cd命令的脚本则无法改变调用者的当前目录。这是因为在Unix下的脚本通常在子外壳中执行。

    cd通常是由命令行解释器内建提供的。绝大多数的Unix shell(Bourne shell、tcsh、bash等)、Windows的cmd.exe和Windows PowerShell、以及DOS的COMMAND.COM均是这种情况。

    Windows的命令行外壳通常使用Windows API来改变当前的工作目录;而Unix系统的cd则是调用POSIX C的函数chdir():即是,当该命令执行时,不会为前往另一个目录而创建一个新的进程,而是由外壳代为执行这条命令,ls等其他命令也是这种情况。这是因为,创建新的进程时,子进程会继承父进程创建时的目录。而如果cd命令继承了父进程的目录,则它永远也不能达到它的目标。

    目录(dir)

    Directory

    dir是一个条列档案及目录的命令行界面指令,在CP/M、VMS、DOS、OS/2、Singularity及Microsoft Windows等操作系统中都有此指令。

    dir指令基本上会列出目录中的档案及子目录的名称,也可以列出其档案大小,建立时间等相关资讯,并且列出所在的磁盘机、可用空间等资讯。dir指令也可以寻找其档案名称符合特定条件的档案。

    例如:

    dir
    

    image

    更多指令:

     DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
      [/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]
    
      [drive:][path][filename]
                  Specifies drive, directory, and/or files to list.
    
      /A          Displays files with specified attributes.
      attributes   D  Directories                R  Read-only files
                   H  Hidden files               A  Files ready for archiving
                   S  System files               I  Not content indexed files
                   L  Reparse Points             -  Prefix meaning not
      /B          Uses bare format (no heading information or summary).
      /C          Display the thousand separator in file sizes.  This is the
                  default.  Use /-C to disable display of separator.
      /D          Same as wide but files are list sorted by column.
      /L          Uses lowercase.
      /N          New long list format where filenames are on the far right.
      /O          List by files in sorted order.
      sortorder    N  By name (alphabetic)       S  By size (smallest first)
                   E  By extension (alphabetic)  D  By date/time (oldest first)
                   G  Group directories first    -  Prefix to reverse order
      /P          Pauses after each screenful of information.
      /Q          Display the owner of the file.
      /R          Display alternate data streams of the file.
      /S          Displays files in specified directory and all subdirectories.
      /T          Controls which time field displayed or used for sorting timefield.
                   C  Creation
                   A  Last Access
                   W  Last Written
      /W          Uses wide list format.
      /X          This displays the short names generated for non-8dot3 file names.  The format is that of /N with the
                  name inserted before the long name.  If no short name is present, blanks are displayed in its place.
      /4          Displays four-digit years.
    

    使用说明:

    • 开关符
      • [/P]表示分屏显示。当文件较多,每显示完一整屏后屏幕暂停,并提示“请按任意键继续”,用户按键后显示下一屏,重复该过程直至显示完毕。
      • [/W]表示以简洁形式(紧缩格式)显示文件清单,目录中只显示文件名和扩展名。
      • [/S]对于给定的文件标志符,显示其在指定目录及指定目录所有下级子目录中的相应位置清单。
    • 文件标志符filespec中的文件名和扩展名可以使用通配符?和*
    • 当文件名是.时,可以省略不写。例如:.ext,filename.可简写为filename.。
    • 该命令可以将显示结果送向打印机。

    创建目录(mkdir)

    Make Directory

    mkdir命令在Unix、DOS、OS/2和Microsoft Windows操作系统以及PHP脚本语言中用于创建一个目录。DOS、OS/2和Windows中,这条指令常被简写用作md

    用法:

    mkdir $NewDirName
    

    例如:

    mkdir TempDir
    

    image

    在类Unix操作系统中,mkdir提供参数。最常用的三个参数为:

    • -p: 以路径名格式指定目录名,如果路径名中的目录不存在,便会新建一个。
    • -v:显示mkdir创建的每个目录。通常与-p配合使用。
    • -m:指定目录的文件权限。

    移除目录(rmdir)

    Remove Directory

    rmdir是UNIX、类Unix系统(例如FreeBSD、Linux)、DOS、OS/2或Windows操作系统中一个移除空文件夹的命令。

    用法:

    rmdir $ExitedDirName
    

    例如:

    rmdir TempDir
    

    image

    在UNIX系统中,rmdir只能移除空文件夹。若要递归的文件夹及其中的所有内容,请使用rm命令。

    设置环境变量(set)

    所有的在cmd命令行下对环境变量的修改只对当前窗口有效,不是永久性的修改。也就是说当关闭此cmd命令行窗口后,将不再起作用。

    如果要永久性的修改环境变量,要么通过注册表修改,要么通过系统高级设置手动来添加。

    通过单纯的set命令可以查看当前所有的环境变量的值

    set
    

    image

    如果要查看其中某一个的值可以直接使用:

    set $targetEnvParam
    

    例如:

    set APPDATA
    

    image

    设置或者修改变量值:

    set $targetEnvParam=$targetEnvValue
    

    例如:

    set TempEnvParam=TeamSpace
    

    然后我们通过%$targetEnvParam%打印输出下它的值

    echo %TempEnvParam%
    

    image

    如果写到batch script里面也可以获取到,比如

    echo %TempEnvParam%
    

    然后我们执行:

    set TempEnvParam=PrintSpace
    1.bat
    

    image

    还可以追加内容

    set TempEnvParam=%TempEnvParam%+1111
    

    image

    其实关于这个环境变量,还有一些约定好的值

    • %AllUsersProfile%: 局部 返回所有“用户配置文件”的位置。 {所有用户文件目录 – C:\Documents and Settings\All Users}
    • %AppData%: 局部 返回默认情况下应用程序存储数据的位置。 {当前用户数据文件夹 – C:\Documents and Settings\wy\Application Data}
    • %Cd%: 局部 返回当前目录字符串。
    • %CmdCmdLine%: 局部 返回用来启动当前的 Cmd.exe 的准确命令行。
    • %CmdExtVersion%: 系统 返回当前的“命令处理程序扩展”的版本号。
    • %CommonProgramFiles%: {文件通用目录 – C:\Program Files\Common Files}
    • %ComputerName%: 系统 返回计算机的名称。 {计算机名 – IBM-B63851E95C9}
    • %ComSpec%: 系统 返回命令行解释器可执行程序的准确路径。 C:\WINDOWS\system32\cmd.exe
    • %Date%: 系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date。
    • %ErrorLevel%: 系统 返回最近使用过的命令的错误代码。通常用非零值表示错误。
    • %HomeDrive%: 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。 {当前用户根目录 – C:}
    • %HomePath%: 系统 返回用户主目录的完整路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。 {当前用户路径 – \Documents and Settings\wy}
    • %HomeShare%: 系统 返回用户的共享主目录的网络路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。
    • %LogonSever%: 局部 返回验证当前登录会话的域控制器的名称。
    • %Number_Of_Processors%: 系统 指定安装在计算机上的处理器的数目。 {处理器个数 – 1}
    • %Os%: 系统 返回操作系统的名称。Windows 2000 将操作系统显示为 Windows_NT。 {操作系统名 – Windows_NT}
    • %Path%: 系统 指定可执行文件的搜索路径。
    • %PathExt%: 系统 返回操作系统认为可执行的文件扩展名的列表。
    • %Processor_Architecture%: 系统 返回处理器的芯片体系结构。值: x86,IA64。 {处理器芯片架构 – x86}
    • %Processor_Identfier%: 系统 返回处理器说明。
    • %Processor_Level%: 系统 返回计算机上安装的处理器的型号。 {处理器型号 – 6}
    • %Processor_Revision%: 系统 返回处理器修订号的系统变量。 {处理器修订号 – 0905}
    • %ProgramFiles%: {程序默认安装目录 – C:\Program Files}
    • %Prompt%: 局部 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。 $P$G
    • %Random%: 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
    • %SystemDrive%: 系统 返回包含 Windows XP 根目录(即系统根目录)的驱动器。 {系统根目录 – C:}
    • %SystemRoot%: 系统 返回 Windows XP 根目录的位置。 {系统目录 – C:\WINDOWS}
    • %Temp%: 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其它应用程序则需要 TMP。 {当前用户临时文件夹 – C:\DOCUME1\wy\LOCALS1\Temp}
    • %Time%: 系统 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。9:16:25.05
    • %UserDomain%: 局部 返回包含用户帐户的域的名称。 {包含用户帐号的域 – IBM-B63851E95C9}
    • %UserName%: 局部 返回当前登录的用户的名称。 {当前用户名 – wy}
    • %UserProfile%: 局部 返回当前用户的配置文件的位置。 {当前用户目录 – C:\Documents and Settings\wy}
    • %WinDir%: 系统 返回操作系统目录的位置。 {系统目录 – C:\WINDOWS}

    image

    打印信息(echo)

    echo是BAT脚本中常用的命令,可以用来打印信息,也可以用来修改文件中的内容。

    • 运行时不显示命令本身
    @echo xxx
    

    例如:

    @echo off
    
    • 查看命令帮助
    echo /?
    

    image

    • 关闭DOS命令提示符,在DOS提示符状态下键入ECHO OFF,能够关闭DOS提示符的显示使屏幕只留下光标,直至键入ECHO ON,提示符才会重新出现。
    echo OFF
    

    image

    • 显示当前ECHO设置状态
    echo
    

    image

    • 输出提示信息
    echo $targetTipMessage
    

    例如:

    echo HelloWorld
    

    image

    • 输出空行,等效于回车
    echo.
    

    紧跟一个.可以输出一个空行

    image

    例如:

    echo.|time
    

    image

    ECHO.加在自动批处理文件中,使原本在屏幕下方显示的提示画面,出现在屏幕上方。

    • 作为后面指定的输入,相当于在调用的命令出现人机对话时输入“Y”回车
    echo Y|CHKDSK/F
    
    • 建立新文件或增加文件内容
    echo 文本内容 > 文件名
    

    例如:

    echo @echo off > 2.bat
    

    image

    还可以追加

    echo 追加文本内容 >> 文件名
    

    例如:

    echo echo 123 >> 2.bat
    

    image

    执行其他文件(call)

    call命令用于调用另一条批处理文件。

    call 1.bat
    

    image

    image

    注释标记(rem)

    rem表示此命令后的字符为解释行,不执行,也就是起到注释作用。

    @REM 执行开始
    echo ...
    @REM 执行结束
    

    image

    image

    参数符号(%)

    %表示参数,参数是指在运行批处理文件时在文件名后加的字符串。

    • 使用两个%包裹一个名称就代表一个变量参数
    %EnvParam%
    

    image

    • %0代表文件名本身

    比如我们在2.bat中写上

    %0
    

    这时候执行2.bat会进入死循环,因为它在2.bat里面继续执行2.bat

    • 字符串输入按%1%9的顺序表示

    比如我要给2.bat执行时传参,那么我要获取到第一个参数和第二个参数

    2.bat Param1 Param2
    
    echo %1
    echo %2
    

    执行之后就会:

    image

    我们来看一个有意思的案例,我们一共传两个参数进入,第一个是/v,第二个是1.0.0.1

    同时我们还准备一个TempVersion的环境变量,它的值:set TempVersion=2.0.0.0

    if "%1" == "/v" (
      set AppVersion=%2
    ) else (
      set AppVersion=%TempVersion%
    )
    
    echo %AppVersion%
    

    执行:

    2.bat /v 1.0.0.1
    
    2.bat
    

    image

    我们看到,当传了两个参数,满足了if条件,它最终打印出来的AppVersion的值是我输入的1.0.0.1,当我没有传入参数的时候,它就走的是else的逻辑,走的环境变量值是2.0.0.0

    • 显示当前目录完整路径: %CD%
    echo %CD%
    

    image

    条件判断(if)

    • 判断参数是否等于字符串
    if 参数 == 字符串(
    
    )
    
    if 参数 == 字符串(
    
    ) else(
    
    )
    

    例如:

    if "%1" == "/v" (
      echo %1
    ) else (
      echo default
    )
    

    image

    • 文件是否存在
    if exist $targetFileName
    

    例如:

    if exist 1.bat(
    
    )
    

    参考

  • 相关阅读:
    Laravel自定义分页样式
    mysql中 key 、primary key 、unique key 和 index 有什么不同
    PHP RSA公私钥的理解和示例说明
    PHP操作Excel – PHPExcel 基本用法
    Yii 1.1 常规框架部署和配置
    阿里云服务器 Ubuntu 安装 LNMP
    全国地区sql表
    十道海量数据处理面试题与十个方法大总结
    Hibernate中对象的三种状态以及Session类中saveOrUpdate方法与merge方法的区别
    乐观锁与悲观锁——解决并发问题
  • 原文地址:https://www.cnblogs.com/taylorshi/p/16301424.html
Copyright © 2020-2023  润新知