Windows批处理
1、变量
其实我的需求是在cmd窗口,输入 npm --version 看是否会打印nodejs的版本号,以此判断是否配置了nodejs环境,然后根据结果判断下面语句的执行。所以需要把结果放到一个变量里面去
@echo 0ff
for /F %%i in ('npm --version') do ( set commitid=%%i)
echo commitid=%commitid%
if "%commitid%"=="" (
echo "fail"
) else (
echo "success")
pause
成功的运行效果
命令不存在运行的效果
注意: 等号左右两侧不能有空格
在网上找了好多资料,通过一周时间的学习,终于入门了批处理。在学习中总觉得网上的资料的讲解顺序不太对,学习一门语言不都是从最基础的定义变量开始的麽,所以我只想分享一下使我迷惑的部分。
变量的定义 SET
有三种形式:
SET [variable=[string]]
SET /P variable=[promptString]
SET /A expression
1.SET [variable=[string]]
很明显是用来定义字符串变量的,
例如:
set a="Hello"
set b=Hello
set "c=Hello"
echo %a%
echo %b%
echo %c%
关于这两条语句需要说明的是,echo命令输出变量,a的值为“Hello”,b的值为Hello,所以“也是字符串的一部分,但c的值为Hello。其次,"="后面如果有空格,那你定义的字符变量就是有空格的,例如set a= Hello,那么a的值就为 Hello,在H前面有一个空格。在批处理中,引用变量是使用%+变量名+%,如%a%,%b%。
第三种定义方式有什么不一样的地方呢?如果你知道,请告诉我哦!
2.SET /P variable=[promptString]
这种是使用交互的方式来定义变量,promptString是提示语句。
set /p a=Please input a number:
echo The number you input is %a%.
其实遇到不理解的地方可以动手试一试,实践是检验真理的唯一标准。
3.SET /A expression
通过表达式来定义变量,这种用法我还没用到过,等用了再更新。
4.SET
SET还可以查看当前的环境变量
直接键入一个SET,然后回车就ok,你可以看到所有的环境变量,包括你定义的变量哦。
SET还有一种使用方式,例如:
SET P
会显示所有以字母 P 打头的变量。如果在当前环境中找不到该变量名称,SET 命令将把 ERRORLEVEL设置成 1
————————————————
版权声明:本文为CSDN博主「见微知著,以常达变」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接: batch批处理学习心得--变量的定义 SET
2、条件
@echo 0ff
for /F %%i in ('npm --version') do ( set commitid=%%i)
echo commitid=%commitid%
if "%commitid%"=="" (
echo "fail"
) else (
echo "success")
pause
说明:起始括号需要跟if或else在同一行
曾经困扰了很久的bat脚本,如果里面包含多种条件判断,就必须要试用if,else if,else的写法了。尝试了很久,终于找到规律:
第一种写法:最简单,就是写一行。
@echo off
rem 写一行比较简洁,缺点是每一种判断内不方便写多条语句
set varA=B
if "%varA%"=="A" (echo %varA% is A) else if "%varA%"=="B" (echo %varA% is B) else (echo %varA% is C)
pause
第二种写法:可读性好的语法是分行写
@echo off
rem 在这种写法可读性好,也能执行多语句,但兼容性不太好
set varA=B
if "%varA%"=="A" (
echo %varA% is A
echo AAA
) else if "%varA%"=="B" (
echo %varA% is B
echo BBB
) else (
echo %varA% is C
echo CCC
pause
第三种写法:可读性好的语法是分行写的加强版
@echo off
rem 可读性好,兼容性好
setlocal EnableDelayedExpansion
set option=2
set sum=-1
if %option% == 3 (
echo three
set /a sum=%option%*%option%*%option%
else if %option% == 2 (
echo two
set /a sum=2*%option%
else if %option% == 1 (
echo one
set /a sum=%option%
else (
echo zero
set /a sum=0
echo sum = !sum!
pause
分行书写总结规则:
if 语句与左括号 ( 同行
右括号 ) 不与 else if 同行
右括号 ) 后面加上续行操作符 ^
【完】
摘自: bat脚本里面if else if的写法
3、循环
@echo 0ff
for /F %%i in ('npm --version') do ( set commitid=%%i)
echo commitid=%commitid%
if "%commitid%"=="" (
echo "fail"
) else (
echo "success")
pause
bat/cmd将命令执行的结果赋值给变量 - 加个小鸡腿 - 博客园
4、设置环境变量
wmic ENVIRONMENT create name="NODEJS_HOME",username="%username%",VariableValue="%~dp0node-v10.24.1-win-x64"
username:%username%表示环境变量;<system>表示系统变量
name:变量名
ariableValue:这里的%~dp0 表示脚本所在的目录,假如脚本所在目录为c:\coding,那么%~dp0node-v10.24.1-win-x64表示c:\coding\node-v10.24.1-win-x64,%~dp0跟node-v10.24.1-win-x64之间无需“\”。
完整实例:
1、如果存在NODEJS_HOME,则删除
2、创建用户环境变量NODEJS_HOME
3、获取计算机名,用户名
4、把环境变量NODEJS_HOME加入到path
5、重启资源管理器
echo "fail"
wmic ENVIRONMENT where "name='NODEJS_HOME'" delete
wmic ENVIRONMENT create name="NODEJS_HOME",username="%username%",VariableValue="%~dp0node-v10.24.1-win-x64"
set un=%USERNAME%
set cn=%computername%
set an=%computername%\\%USERNAME%
wmic ENVIRONMENT where "name='Path' and username='%computername%\\%USERNAME%'" set VariableValue="%path%;%~dp0node-v10.24.1-win-x64\;"
) else (
echo "success")
taskkill /im explorer.exe /f
@echo ================================================
@echo 下面开始重启“explorer.exe”进程