zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    进制
    流程控制
    运算符
    格式化输出
    数据结构-树的遍历
    A1004 Counting Leaves (30分)
    A1106 Lowest Price in Supply Chain (25分)
    A1094 The Largest Generation (25分)
    A1090 Highest Price in Supply Chain (25分)
    A1079 Total Sales of Supply Chain (25分)
  • 原文地址:https://www.cnblogs.com/answerwinner/p/6704180.html
Copyright © 2011-2022 走看看