• Windows bat 学习(高级)


    • 有一种叫做 Command Processor Extensions 的东西,即命令处理器扩展。他会使命令更加高级,功能更多。

    在 cmd 里可以使用 ECHO %CMDEXTVERSION% 查看当前版本。

    • 在 cmd.exe 控制台窗口中输入命令,跟在 Windows Explorer 中双击 bat 执行相同的命令,其表现是不一样的。
    • 双击 bat 等同于把 bat 的内容 cmd 里一行一行命令敲进去(多行的命令在cmd里并不好敲)
    • 若要学习各个命令的详细文档,可在 cmd 中输入例如 SET /? > SET.txt 保存到文本文件中再打开阅读,这样比较方便。在 cmd 中如果文本太长他会逐步显示,比较麻烦,也不能用鼠标选中或者查找。
    • 变量延迟展开(Delayed environment variable expansion)

    (SET /? 中有详细说明)

    cmd 里的变量都是“环境变量”,通常是先 SET,再使用 %var% 这样的形式使用。%var% 是在读取当前命令时展开的。这是什么意思?

    1     set VAR=before
    2     if "%VAR%" == "before" (
    3         set VAR=after
    4         if "%VAR%" == "after" @echo If you see this, it worked
    5     )

    第4行永远不会打印。因为第4行的 %VAR% 在第2行命令“读取”时,已经被展开,即 before。第3行的赋值已经不可能影响第4行了。我猜是因为第4行是在第2行的if 里面的,在读取第2行时,第4行也读取了,所以就被展开了。

    跟C++对比,命令行里的 “环境变量” 实际是介于 “真变量” 和 “宏变量” 之间的东西。

    “延迟变量展开” 的意思是基本上就是把 “环境变量” 变为 “真变量”。

    要改成这么写:!VAR!

    set VAR=before
        if "%VAR%" == "before" (
            set VAR=after
            if "!VAR!" == "after" @echo If you see this, it worked
        )

    如何开启 “延迟变量展开”?

    This support is always disabled by default, but may be enabled/disabled via the /V command line switch to CMD.EXE.  See CMD /?

    • 环境变量字符串替换
    SET foo=helloworld
    ECHO %foo:hello=% // world ECHO
    %foo:hello=love% // loveworld
    • 环境变量子字符串
    SET foo=helloworld
    
    // 前面是起始索引,后面是长度
    ECHO %foo:~0,1%  // h,index=0, length=1
    ECHO %foo:~-2%    // ld,意思是 index=-2=length(helloworld)-2=8, length未指定就是指取到最后面
    ECHO %foo:0,-1%   // helloworl, 意思是 index=0, length=length(helloworld)-1=9
  • 相关阅读:
    js正则表达式——数字校验
    php curl cookie 读写
    Java遍历所有网卡打印对应IP
    mysql 查看数据库大小
    执行mvn 报错 source-1.5 中不支持 diamond运算符
    php开学之环境搭建
    ubuntu漂亮主题
    CleanAop使用笔记
    python学习笔记(五)
    python学习笔记(四)
  • 原文地址:https://www.cnblogs.com/answerwinner/p/6704180.html
Copyright © 2020-2023  润新知