专栏首页GreenLeaveswindows 批处理命令必知必会

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:\Users\Administrator\Desktop\test.txt) do echo %%i 
pause>nul 

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

直接输出了文件名

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

@echo off
for /f "delims=、" %%i in (C:\Users\Administrator\Desktop\test.txt) do echo %%i
pause>nul 

按顿号分割,每一行

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

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

for /f  "tokens=2 delims=、" %%i in (C:\Users\Administrator\Desktop\test.txt) do echo %%i
pause>nul 

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

@echo off
for /f  "tokens=2 delims=、." %%i in (C:\Users\Administrator\Desktop\test.txt) do echo %%i
pause>nul 

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

@echo off
for /f "tokens=1,3 delims=、-." %%i in (C:\Users\Administrator\Desktop\test.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:\Users\Administrator\Desktop\test.txt) do echo %%i 
pause>nul 

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

注:如果不带,如下:

echo off
for /f %%i in (C:\Users\Administrator\Desktop\test.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 变量的方式也需要变换,不能使用%%,而是要使用!!来标记变量.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Windows 必知命令

    Windows 命令在开发工作相较于 Linux 命令并没有那么常用,但是常见的命令还是需要掌握,下面就列举软件开发人员必知必会的命令。

    Dabelv
  • Linux命令必知必会

    第一行中,03:30:22是当前时间,up 39 min是系统运行的运行了多长时间,1 user指出了当前有几个用户登录到系统,load average指的是系...

    用户2131907
  • 春招面试网络管理命令必知必会

    1.基本工具2.网络查看与配置2.1 网络查看2.2 网络配置3.网关查看及配置3.1 查看网关(或者路由)3.2 网关配置4.网络故障排除5.网络服务管理5....

    公众号guangcity
  • Linux必知必会-理解内存使用统计命令free

    本文详细介绍了Linux系统中的free命令的使用方法以及关键参数的含义,这可能是你见过的关于free命令最详细的一篇文章了,绝对值得你收藏。

    用户2131907
  • java程序员必知必会常见linux命令

    我想看下我的服务器有几个用户我该如何操作呢,w 一下,一目了然,有图好说话,别和我秀代码,赶紧告诉我。

    码农王同学
  • 软件测试工程师必知必会Linux命令

    Linux系统有着众多的优点,比如开源、非商业版本免费、多任务多用户操作,因此Linux系统在非桌面领域占有压倒性的市场份额。对于互联网技术工作者来说,掌握常用...

    小小科
  • Git工作/面试必知必会操作-命令行篇

    版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。开发中,我们仅对保存着软件源代码的文本文件作版本控制管理,但实际上,可以对任何类型...

    JavaEdge
  • Git工作/面试必知必会操作-命令行篇

    版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。开发中,我们仅对保存着软件源代码的文本文件作版本控制管理,但实际上,可以对任何类型...

    JavaEdge
  • Linux网络命令必知必会之瑞士军刀 nc(netcat)

    nc,全名叫 netcat,它可以用来完成很多的网络功能,譬如端口扫描、建立TCP/UDP连接,数据传输、网络调试等等,因此,它也常被称为网络工具的 瑞士军刀 ...

    猿大白

扫码关注云+社区

领取腾讯云代金券