杂谈 | windows批处理脚本 | 配置项目环境变量

一、windows脚本编程

  以配置一个项目的环境变量为例,来详解用到的命令行语法。若本文未涉及到你需要的命令,则可以查看:Windows 命令 这个链接来查看命令的使用。

1.echo 命令

参考:https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/echo

  • 功能:

    显示消息或者打开或关闭命令回显功能。

    如果不结合任何参数使用,echo 会显示当前回显设置。

    C:\Users\85733>echo
    ECHO 处于打开状态。
    

    什么是命令回显功能呢?

      命令回显功能是指在运行命令或脚本时,系统将命令的执行过程和结果显示在屏幕上,使用户能够实时地看到命令的执行情况。通常,当命令回显功能打开时,在执行每一步命令时,系统将会显示执行的命令本身以及对应的结果,从而帮助用户了解命令的执行过程,排查可能出现的问题。关闭回显时,命令提示符不会出现在“命令提示符”窗口中。 若要再次显示命令提示符,请键入 echo on。

  • 语法:

    echo [<message>]   #用于显示消息
    echo [on | off]	   #打开或关闭命令回显功能
    
    • 参数on | off: 用于打开或关闭命令回显功能。on 为打开命令回显功能,off 为关闭命令回显功能。命令回显功能默认已打开。

    • 参数<message> :指定要在屏幕上显示的文本

      C:\Users\85733>echo 请用管理员身份运行
      请用管理员身份运行
      
    • 特殊参数 /?:在命令提示符下显示帮助

      C:\Users\85733>echo /?
      显示消息,或者启用或关闭命令回显。
      
        ECHO [ON | OFF]
        ECHO [message]
      
      若要显示当前回显设置,请键入不带参数的 ECHO。
      
  • 注意事项:

    • 若要防止回显批处理文件中的特定命令,请在该命令前面插入 (@) 符号。 若要防止回显批处理文件中的所有命令,请在文件开头包含 echo off 命令。

      @echo on
      @echo 请用管理员身份运行
      
    • echo %cd%:用于打印当前目录的路径

      %cd% 可以用在批处理文件中,也可以用在命令行中;展开后,是驱动器盘符:+当前目录;%cd%的内容是可以被改变的,其内容为命令的执行路径或批处理文件的执行路径。

      示例:

      C:\Users\85733>echo %cd%
      C:\Users\85733
      

2.cd 命令

参考:https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/cd

  • 功能:

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

  • 语法:

    cd [/d] [<drive>:][<path>]
    cd [..]
    
    • 参数 /d:用 cd 命令更改驱动器时,用到这个参数

    • 参数<drive>::指定要显示或更改的驱动器(如果与当前驱动器不同)。

      C:\Users\85733\Desktop>cd /d d:pms
      D:\pms>
      

      若不加 /d 参数,则切换不起作用

    • 参数<path>:指定要显示或更改的目录的路径

      C:\Users\85733>cd Desktop
      C:\Users\85733\Desktop>
      
    • 参数..:指定要更改为父文件夹

      C:\Users\85733>cd ..
      C:\Users>
      
    • 参数/?:在命令提示符下显示帮助

  • 示例:

    cd %~dp0
    

    用于切换到脚本所在的目录下。与 %cd% 相比,%~dp0只可以用在批处理文件中,它是由它所在的批处理文件的目录位置决定的,是批处理文件所在的盘符:+路径。在执行这个批处理文件的过程中,它展开后的内容是不可以改变的。

3. SET 命令

  • 功能:

    查看指定变量名的环境变量 或者 为某一变量名设置临时环境变量(其作用范围:只有在当前窗口下有效)。

  • 语法:

    SET [varible=[string]]
    
    • 参数varible:指定环境变量名
    • 参数string:指定要指派给变量的一系列字符串,若没有这个参数,则是查看指定变量名的环境变量值
  • 示例:

    D:\>set Path
    Path=D:\Program Files (x86)\VMware\VMware Workstation\bin\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\dotnet\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;D:\Qt\Qt5.15.2\5.15.2\msvc2019_64\bin;D:\Qt\Qt5.15.2\5.15.2\msvc2019_64\lib;D:\Program Files\MariaDB 10.5\bin;D:\Program Files\MariaDB 10.5\lib;D:\Program Files\Kingbase\ES\V8\KESRealPro\V008R006C006B0021\Server\bin;D:\Program Files\Kingbase\ES\V8\KESRealPro\V008R006C006B0021\Server\lib;D:\Program Files\MariaDB 10.5\data;D:\pms\platform\platform_v1.0\bin_d;D:\pms\platform\platform_v1.0\lib_d;D:\pms\pms1100\pms1100_v1.0\bin_d;D:\pms\pms1100\pms1100_v1.0\lib_d;D:\pms\platform\platform_v1.0\src\graph\baselib\bin_d;D:\pms\platform\platform_v1.0\src\graph\baselib\lib_d;D:\pms\platform\platform_v1.0\src\graph\graphplatform\bin_d;D:\pms\platform\platform_v1.0\src\graph\graphplatform\lib_d;D:\VS2019\2019\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64;;D:\Qt\5.15.2\msvc2019\bin;D:\Qt\5.15.2\msvc2019_64\bin;D:\VS2019\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\Hostx86\x86;D:\Program Files\CMake\bin;D:\Qt\5.15.2\msvc2019_64;C:\Users\85733\AppData\Local\Microsoft\WindowsApps;C:\Users\85733\.dotnet\tools
    PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
    PATH_YN=D:\Qt\Qt5.15.2\5.15.2\msvc2019_64\bin;D:\Qt\Qt5.15.2\5.15.2\msvc2019_64\lib;D:\Program Files\MariaDB 10.5\bin;D:\Program Files\MariaDB 10.5\lib;D:\Program Files\Kingbase\ES\V8\KESRealPro\V008R006C006B0021\Server\bin;D:\Program Files\Kingbase\ES\V8\KESRealPro\V008R006C006B0021\Server\lib;D:\Program Files\MariaDB 10.5\data;D:\pms\platform\platform_v1.0\bin_d;D:\pms\platform\platform_v1.0\lib_d;D:\pms\pms1100\pms1100_v1.0\bin_d;D:\pms\pms1100\pms1100_v1.0\lib_d;D:\pms\platform\platform_v1.0\src\graph\baselib\bin_d;D:\pms\platform\platform_v1.0\src\graph\baselib\lib_d;D:\pms\platform\platform_v1.0\src\graph\graphplatform\bin_d;D:\pms\platform\platform_v1.0\src\graph\graphplatform\lib_d;D:\VS2019\2019\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64;
    

    设置环境变量:

    SET QMAKESPEC=win32-msvc
    SET QTDIR=D:\Qt\5.15.2
    SET Qt_INCLUDEPATH_=%QTDIR%\include
    SET MYSQLHOME=D:\Program Files\MariaDB 10.5
    SET KINGBASEHOME=D:\Program Files\Kingbase\ES\V8\KESRealPro\V008R006C006B0021\Server
    SET VCINSTALLDIR=D:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\VC
    

4.SETX 命令

参考:https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/setx

  • 功能:

    此命令提供直接和永久设置系统环境值的唯一命令行或编程方式。 可以通过控制面板或通过注册表编辑器手动配置系统环境变量。 set 命令是命令解释器 (Cmd.exe) 的内部命令,仅为当前控制台窗口设置用户环境变量。

  • 语法:

    setx [/s <computer> [/u [<domain>\]<user name> [/p [<password>]]]] <variable> <value> [/m]
    setx [/s <computer> [/u [<domain>\]<user name> [/p [<password>]]]] <variable>] /k <path> [/m]
    setx [/s <computer> [/u [<domain>\]<user name> [/p [<password>]]]] /f <filename> {[<variable>] {/a <X>,<Y> | /r <X>,<Y> <String>} [/m] | /x} [/d <delimiters>]
    

    语法比较复杂,其实很多选项没用到

  • 示例:永久保存到系统环境变量中

    SETX "QMAKESPEC" "%QMAKESPEC%" -M
    SETX "QTDIR" "%QTDIR%" -M
    SETX "MYSQLHOME" "%MYSQLHOME%" -M
    SETX "KINGBASEHOME" "%KINGBASEHOME%" -M
    SETX "VCINSTALLDIR" "%VCINSTALLDIR%" -M
    
    SETX "PLATFORMHOME" "%PLATFORMHOME%" -M
    SETX "SYSTEMHOME" "%SYSTEMHOME%" -M
    SETX "BASEHOME" "%BASEHOME%" -M
    SETX "GPENVPATH" "%GPENVPATH%" -M
    

5.goto 命令

可参考:https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/goto

  • 功能:

    将 cmd.exe 定向到批处理程序中的标记行。 在批处理程序中,此命令将命令处理定向到由标签标识的行。 找到标签后,继续处理,从下一行开始的命令开始。

  • 语法:

    goto <label>
    
    • 参数<label>:指定在批处理程序中用作标签的文本字符串。

      为 label 指定的值必须与批处理程序中的标签匹配。 批处理程序中的标签必须以冒号 (😃 开头。 如果某行以冒号开头,则系统会将此行视为标签,并忽略此行中的任何命令。 如果批处理程序不包含你在 label 参数中指定的标签,则批处理程序将停止并显示以下消息:Label not found

  • 示例:

    下面的批处理程序将驱动器 A 中的磁盘格式化为系统盘。 如果操作成功,则 goto 命令将处理定向到 :end 标签:

    echo off
    format a: /s
    if not errorlevel 1 goto end
    echo An error occurred during formatting.
    :end
    echo End of batch program.
    

6.pause 命令

可参考:https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/pause

  • 功能:

    暂停批处理程序的处理,显示提示,Press any key to continue . . .

  • 语法:

    pause
    

    可以在可能不想处理的批处理文件的某个部分之前插入 pause 命令。 当 pause 暂停批处理程序时,可以按 Ctrl+C,然后按 “Y” 停止批处理程序。

二、环境变量配置批处理程序示例

.bat

@echo on
@echo 请用管理员身份运行

echo %cd%
d:
cd %~dp0

SET QMAKESPEC=win32-msvc
SET QTDIR=D:\Qt\5.15.2\msvc2019
SET Qt_INCLUDEPATH_=%QTDIR%\include
SET VCINSTALLDIR=D:\VS2019\2019\Enterprise\Common7\IDE\VC

SET PLATFORMHOME=D:\pms\platform\platform_v1.0
SET SYSTEMHOME=%cd%
SET BASEHOME=%PLATFORMHOME%\src\graph\baselib
SET GPENVPATH=%PLATFORMHOME%\src\graph\graphplatform

SET PATH_YN=%QTDIR%\bin;%QTDIR%\lib;
SET PATH_YN=%PATH_YN%;%PLATFORMHOME%\bin_d;%PLATFORMHOME%\lib_d;%SYSTEMHOME%\bin_d;%SYSTEMHOME%\lib_d
SET PATH_YN=%PATH_YN%;%BASEHOME%\bin_d;%BASEHOME%\lib_d;%GPENVPATH%\bin_d;%GPENVPATH%\lib_d
SET PATH_YN=%PATH_YN%;D:\VS2019\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64

SETX "QMAKESPEC" "%QMAKESPEC%" -M
SETX "QTDIR" "%QTDIR%" -M
SETX "VCINSTALLDIR" "%VCINSTALLDIR%" -M

SETX "PLATFORMHOME" "%PLATFORMHOME%" -M
SETX "SYSTEMHOME" "%SYSTEMHOME%" -M
SETX "BASEHOME" "%BASEHOME%" -M
SETX "GPENVPATH" "%GPENVPATH%" -M

SETX "PATH_YN" "%PATH_YN%" -M

@goto end
:end

pause

用管理员身份运行结果如下:

D:\pms\pms1100\pms1100_v1.0>"设置QT5.15+VS2019+64位开发环境 - 长期生效.bat"
请用管理员身份运行

D:\pms\pms1100\pms1100_v1.0>echo D:\pms\pms1100\pms1100_v1.0
D:\pms\pms1100\pms1100_v1.0

D:\pms\pms1100\pms1100_v1.0>d:

D:\pms\pms1100\pms1100_v1.0>cd D:\pms\pms1100\pms1100_v1.0\

D:\pms\pms1100\pms1100_v1.0>SET QMAKESPEC=win32-msvc

D:\pms\pms1100\pms1100_v1.0>SET QTDIR=D:\Qt\5.15.2\msvc2019

D:\pms\pms1100\pms1100_v1.0>SET Qt_INCLUDEPATH_=D:\Qt\5.15.2\msvc2019\include

D:\pms\pms1100\pms1100_v1.0>SET VCINSTALLDIR=D:\VS2019\2019\Enterprise\Common7\IDE\VC

D:\pms\pms1100\pms1100_v1.0>SET PLATFORMHOME=D:\pms\platform\platform_v1.0

D:\pms\pms1100\pms1100_v1.0>SET SYSTEMHOME=D:\pms\pms1100\pms1100_v1.0

D:\pms\pms1100\pms1100_v1.0>SET BASEHOME=D:\pms\platform\platform_v1.0\src\graph\baselib

D:\pms\pms1100\pms1100_v1.0>SET GPENVPATH=D:\pms\platform\platform_v1.0\src\graph\graphplatform

D:\pms\pms1100\pms1100_v1.0>SET PATH_YN=D:\Qt\5.15.2\msvc2019\bin;D:\Qt\5.15.2\msvc2019\lib;

D:\pms\pms1100\pms1100_v1.0>SET PATH_YN=D:\Qt\5.15.2\msvc2019\bin;D:\Qt\5.15.2\msvc2019\lib;;D:\pms\platform\platform_v1.0\bin_d;D:\pms\platform\platform_v1.0\lib_d;D:\pms\pms1100\pms1100_v1.0\bin_d;D:\pms\pms1100\pms1100_v1.0\lib_d

D:\pms\pms1100\pms1100_v1.0>SET PATH_YN=D:\Qt\5.15.2\msvc2019\bin;D:\Qt\5.15.2\msvc2019\lib;;D:\pms\platform\platform_v1.0\bin_d;D:\pms\platform\platform_v1.0\lib_d;D:\pms\pms1100\pms1100_v1.0\bin_d;D:\pms\pms1100\pms1100_v1.0\lib_d;D:\pms\platform\platform_v1.0\src\graph\baselib\bin_d;D:\pms\platform\platform_v1.0\src\graph\baselib\lib_d;D:\pms\platform\platform_v1.0\src\graph\graphplatform\bin_d;D:\pms\platform\platform_v1.0\src\graph\graphplatform\lib_d

D:\pms\pms1100\pms1100_v1.0>SET PATH_YN=D:\Qt\5.15.2\msvc2019\bin;D:\Qt\5.15.2\msvc2019\lib;;D:\pms\platform\platform_v1.0\bin_d;D:\pms\platform\platform_v1.0\lib_d;D:\pms\pms1100\pms1100_v1.0\bin_d;D:\pms\pms1100\pms1100_v1.0\lib_d;D:\pms\platform\platform_v1.0\src\graph\baselib\bin_d;D:\pms\platform\platform_v1.0\src\graph\baselib\lib_d;D:\pms\platform\platform_v1.0\src\graph\graphplatform\bin_d;D:\pms\platform\platform_v1.0\src\graph\graphplatform\lib_d;D:\VS2019\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64

D:\pms\pms1100\pms1100_v1.0>SETX "QMAKESPEC" "win32-msvc" -M

成功: 指定的值已得到保存。

D:\pms\pms1100\pms1100_v1.0>SETX "QTDIR" "D:\Qt\5.15.2\msvc2019" -M

成功: 指定的值已得到保存。

D:\pms\pms1100\pms1100_v1.0>SETX "VCINSTALLDIR" "D:\VS2019\2019\Enterprise\Common7\IDE\VC" -M

成功: 指定的值已得到保存。

D:\pms\pms1100\pms1100_v1.0>SETX "PLATFORMHOME" "D:\pms\platform\platform_v1.0" -M

成功: 指定的值已得到保存。

D:\pms\pms1100\pms1100_v1.0>SETX "SYSTEMHOME" "D:\pms\pms1100\pms1100_v1.0" -M

成功: 指定的值已得到保存。

D:\pms\pms1100\pms1100_v1.0>SETX "BASEHOME" "D:\pms\platform\platform_v1.0\src\graph\baselib" -M

成功: 指定的值已得到保存。

D:\pms\pms1100\pms1100_v1.0>SETX "GPENVPATH" "D:\pms\platform\platform_v1.0\src\graph\graphplatform" -M

成功: 指定的值已得到保存。

D:\pms\pms1100\pms1100_v1.0>SETX "PATH_YN" "D:\Qt\5.15.2\msvc2019\bin;D:\Qt\5.15.2\msvc2019\lib;;D:\pms\platform\platform_v1.0\bin_d;D:\pms\platform\platform_v1.0\lib_d;D:\pms\pms1100\pms1100_v1.0\bin_d;D:\pms\pms1100\pms1100_v1.0\lib_d;D:\pms\platform\platform_v1.0\src\graph\baselib\bin_d;D:\pms\platform\platform_v1.0\src\graph\baselib\lib_d;D:\pms\platform\platform_v1.0\src\graph\graphplatform\bin_d;D:\pms\platform\platform_v1.0\src\graph\graphplatform\lib_d;D:\VS2019\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64" -M

成功: 指定的值已得到保存。

D:\pms\pms1100\pms1100_v1.0>pause
请按任意键继续. . .
  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值