一、windows脚本编程
以配置一个项目的环境变量为例,来详解用到的命令行语法。若本文未涉及到你需要的命令,则可以查看:Windows 命令 这个链接来查看命令的使用。
1.echo 命令
-
功能:
显示消息或者打开或关闭命令回显功能。
如果不结合任何参数使用,echo 会显示当前回显设置。
C:\Users\85733>echo ECHO 处于打开状态。
-
语法:
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 请用管理员身份运行
-
:用于打印当前目录的路径
%cd%
可以用在批处理文件中,也可以用在命令行中;展开后,是驱动器盘符:+当前目录;%cd%
的内容是可以被改变的,其内容为命令的执行路径或批处理文件的执行路径。示例:
C:\Users\85733>echo %cd% C:\Users\85733
-
2.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 命令
-
功能:
此命令提供直接和永久设置系统环境值的唯一命令行或编程方式。 可以通过控制面板或通过注册表编辑器手动配置系统环境变量。 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 命令
-
功能:
将 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 命令
-
功能:
暂停批处理程序的处理,显示提示,
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
请按任意键继续. . .