批处理(bat)命令学习的一些总结

2019-09-19 06:41:46刘景俊

3、再介绍一些在cmd窗口中的技巧,当然它们仅仅是“欺骗”cmd窗口,一旦输出到文件就原形毕露:
@echo off
echo 1
echo 2
echo 3
echo 退行了
pause>nul
::这个太牛了,不知道哪位发现的
set "dq= "
(echo 2、计划生育的重要性%dq%啊
echo 1、贯彻落实科学发展观%dq%哇)|sort
::借助tab键与退格符实现多行捆绑排序并错行显示,tab与退格之间的那个空格是关键,否则变为退行
set /p=同一行显示不同颜色:
set /p=红底蓝字
echo  黄底绿字
findstr /a:41 .* 红底蓝字?
findstr /a:62 .* 黄底绿字?
del>nul 红底蓝字 黄底绿字
pause
::经常见到的在同一行显示不同颜色的办法,不过很多人总是用    (四个退格四个空格),说明没理解退格键的意义
@prompt $_
dir fuck.tmp
pause
::利用这个prompt,打开回显后可以同时输出命令与命令结果,而不会有多余内容,适合制作bat运行日志
echo 
::这个黑色的圆点在前面的介绍中作为配角出现过,是ansi码中的0x07,也等同于在cmd中输入的ctrl+G,它每次被显示在屏幕上时都会发出“滴”的一声,所以以后findstr *.*时一定要留神了(除非不得已,否则需要把结果显示到窗口时建议加上/p开关),万一不小心打印出几万个,你的电脑会像发电报一样响个不停,我中招N次了...

六、cmd运行机制篇

1、预处理机制:特殊字符优先级、语句和语块的划分
setlocal enabledelayedexpansion
(set n=3
set /a n=2,n=%n%+!n!+n)
::利用预处理机制,将一个变量解释为多个值
setlocal enabledelayedexpansion
echo ^^!
::当语句中存在变量延迟符号时,将被预处理两次,这是一定要注意的
set str=.
set "str name=str"
for %%a in (%tmp%) do if defined %%a echo %%a 存在变量str
::利用for的参数变量在if参数划分之后才被解释的特点,弥补if defined对于空格变量名的兼容性缺陷,本质原因是for和if都是特殊的函数,他们的参数设置在语块的预处理中就已经被cmd“记住”了,之后无法对其进行改变。
(del %0
echo 能找到我,就给你发糖
pause>nul)
::括号里的内容被理解成一个语块,运行其中的命令时不需从文件读取,所以就算删除自身仍可运行。
echo "test&pause|sort
::当一行命令中存在奇数个双引号时,将会转义其后所有本行字符
for /f tokens^=2delims^=^" %%a in ("123"test"456") do echo %%a
::通过对特殊字符的转义,在for中用双引号当分隔符
for /f tokens^=2delims^=^" %%a in (^"123"456") do echo %%a
set /p=^"""
::当一组字符串中含有奇数个双引号时经常会出错,解决方法是转义其中的一个,保持有效的双引号成对,可是引号对之内无法用转义符对其转义,所以转义符要放在引号对之外使用

相关文章 大家在看