zoukankan      html  css  js  c++  java
  • windows 批处理命令必知必会

    全局用例,有如下txt文件,内容如下:

    1、java.jar 
    2、.net.dll
    3、javascript.js
    4、image.jpeg 
    5、html.htm

    1、for命令

    (1)、参数 /f 代表扫描文件,打印文件所有内容,代码如下:

    for /f %%i in (C:UsersAdministratorDesktop	est.txt) do echo %%i 
    pause>nul 

     如果不加/f参数,输入如下:

     直接输出了文件名

    (2)、delims参数 按指定的字符串切分,默认情况下,只显示第一个分隔符前的内容.如下代码

    @echo off
    for /f "delims=、" %%i in (C:UsersAdministratorDesktop	est.txt) do echo %%i
    pause>nul 

    按顿号分割,每一行

    注意文件的编码,因为、中文中才有.根据内容发现,其只显示了分隔符之前的内容.

    (3)、tokens参数,(2)中实例的缺点很明显.通过delims分割后,默认只取分割后第一个内容,如果我要取、后面的内容怎么取?所以tokens参数就是用来解决这个问题的.如下代码:

    for /f  "tokens=2 delims=、" %%i in (C:UsersAdministratorDesktop	est.txt) do echo %%i
    pause>nul 

    (4)、tokens参数配合delims参数,delims参数按多个字符分割,然后取一列.

    @echo off
    for /f  "tokens=2 delims=、." %%i in (C:UsersAdministratorDesktop	est.txt) do echo %%i
    pause>nul 

    (4)、通过tokens提取多列,上面的例子都是提取一列的,假设需要提取序号和后缀,代码如下:

    @echo off
    for /f "tokens=1,3 delims=、-." %%i in (C:UsersAdministratorDesktop	est.txt) do echo %%i %%j
    pause>nul 

    关于更多for命令参考 https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/for

    2、@echo off命令

    关闭所有命令(包括本身这条命令)的回显,1.1中的代码显然不是想要的,因为每echo一次,都会回显一次,关于回显ms给出了解释,大致就是每一行echo都会在命令行中执行一下,但显然不是我想要的,我要在一块的输出,所以@echo off命令用上了.代码如下:

    @echo off
    for /f %%i in (C:UsersAdministratorDesktop	est.txt) do echo %%i 
    pause>nul 

     输出了文本的所有信息,没有任何多余的执行信息.

    注:如果不带,如下:

    echo off
    for /f %%i in (C:UsersAdministratorDesktop	est.txt) do echo %%i 
    pause>nul 

     关于更多echo 参考https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/echo

    3、setlocal enabledelayedexpansion延迟环境变量扩展

    windows批处理命令对变量的处理,采用替换的方式,且其是一句一句(必须是一条完整的语句)执行的.如果不明白,看如下例子.

    (1)、定义一个变量,并输出:

    显然,cmd将上面的操作分为两条语句.所以输出正常.下面换种写法

     按常规思路输出应为1,但是错了,所以windows批处理命令对变量的处理,采用替换的方式,且其是一句一句(必须是一条完整的语句)执行的这句话看起来是对的.因为cmd将其看作了一条语句,大家一起执行(猜的),那么输出var的时候set var=1还没有执行,所以没有输出.

    如何实现常规思路的结果呢?通过setlocal enabledelayedexpansion,通过延时的方式,将这条语句拆分,一个个执行(猜的),如下:

    @echo off & setlocal enabledelayedexpansion
    set var=1 & echo !var!
    pause

    (2)、从(1)中找出了cmd这个特性,那么所有带()的命令都会有如此特性,如for if等

    (3)、正因为cmd的如此特性,对应echo 变量的方式也需要变换,不能使用%%,而是要使用!!来标记变量.

  • 相关阅读:
    【原】git常见用法
    【转】EDID的简介和解析
    rsa公钥和私钥的生成
    往redis中存储数据是利用pipeline方法
    对于接口文档个的说明内容包括哪些
    blueprint的使用
    flask中如何生成迁移文件
    flask中自定义过滤器
    jsonify
    flask自定义处理错误方法
  • 原文地址:https://www.cnblogs.com/GreenLeaves/p/14329753.html
Copyright © 2011-2022 走看看