windows脚本编写及使用方法 |
您所在的位置:网站首页 › 在电脑上怎么编辑程序文档 › windows脚本编写及使用方法 |
windows脚本
在 Windows 平台下,有时候会通过脚本来做一些快速的批量的操作,不仅节省时间,使用起来还很方便,可以进行批量处理文件,杀死进程等操作。脚本使用方法总结的比较好的一篇文章见:传送门。 脚本常用示例(1)创建 bat 脚本及中文乱码问题 在 Windows 平台下,新建一个文本文档,然后将其后缀名改为 bat 即可,例如:test.bat,这样就创建好了一个脚本文件,添加内容后直接双击文件即可运行,简单易用。 不过,这种方法新建的脚本常常会无法正常显示中文。 原因: 批处理文件,是以ANSI编码方式。若以别的方式(如UTF-8)编辑了批处理,转换成ANSI格式即可,正常创建的文件的格式都是utf-8的。 解决: 在代码里修改执行时的编码格式: @echo off ::后续命令使用的是:UTF-8编码 chcp 65001 echo 中文 pause其他 类似转换: doc 代码页(自行百度): chcp 65001 就是换成UTF-8代码页 chcp 936 可以换回默认的GBK chcp 437 是美国英语 实现sleep定时功能在实际使用中,经常会想要定时去处理东西,但是windows脚本很奇怪,竟然没有类似linux 下的sleep()函数功能,很是吃惊。网上多是利用ping指令来模拟定时功能。例如: ping 168.11.1.1 -n 1 -w 1000 >nul切记,这个ip地址一定要不能ping通,要是能ping通的话,时间就完全不对了。需要更换一个不能ping通的ip地址。 在写脚本时,有时想要用到死循环进行测试,可使用以下示例: :loop ::添加自己要执行的任务 echo add your own work ! goto:loop利用goto功能来无线跳转,实现类似while(1)死循环的功能。 pause后重新执行 @echo off :loop set /p var=please input num: echo your input num=%var% pause goto:loop如上,每执行一次便会暂停,按键enter后便会重新全部执行,主要还是利用goto实现总体的循环。 查看进程及杀死进程使用tasklist指令来查看windows下正在运行的进程。 本条内容引用[英雄出品]的批处理教程: 要想进阶,变量延迟是必过的一关!所以这一部分希望你能认真看。 为了更好的说明问题,我们先引入一个例子。 例1: @echo off set a=4 set a=5 & echo %a% pause结果:4 解说:为什么是4而不是5呢?在echo之前明明已经把变量a的值改成5了? 让我们先了解一下批处理运行命令的机制: 批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。我们现在分析一下例1,批处理在运行到这句“set a=5 & echo %a%”之前,先把这一句整句读取并做了预处理——对变量a赋了值,那么%a%当然就是4了!(没有为什么,批处理就是这样做的。) 而为了能够感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,也就是说“延迟”了对变量的赋值。 那么如何开启变量延迟呢?变量延迟又需要注意什么呢?举个例子说明一下: 例2: @echo off setlocal enabledelayedexpansion set a=4 set a=5 & echo !a! pause结果:5 解说:启动了变量延迟,得到了正确答案。变量延迟的启动语句是“setlocal enabledelayedexpansion”,并且变量要用一对叹号“!!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果。 分析一下例2,首先“setlocal enabledelayedexpansion”开启变量延迟,然后“set a=4”先给变量a赋值为 4,“set a=5 & echo !a!”这句是给变量a赋值为5并输出(由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时a的值就是5了)。 再举一个例子巩固一下。 例3: @echo off setlocal enabledelayedexpansion for /l %%i in (1,1,5) do ( set a=%%i echo !a! ) pause结果: 1 2 3 4 5 解说:本例开启了变量延迟并用“!!”将变量扩起来,因此得到我们预期的结果。如果不用变量延迟会出现什 么结果呢?结果是这样的: ECHO 处于关闭状态。 ECHO 处于关闭状态。 ECHO 处于关闭状态。 ECHO 处于关闭状态。 ECHO 处于关闭状态。 即没有感知到for语句中的动态变化。 提示:在没有开启变量延迟的情况下,某条命令行中的变量改变,必须到下一条命令才能体现。这一点也可以加以利用,看例子。 例:交换两个变量的值,且不用中间变量 @echo off ::目的:交换两个变量的值,但是不使用临时变量 ::Code by JM 2007-1-24 [email=CMD@XP]CMD@XP[/email] ::出处:http://www.cn-dos.net/forum/viewthread.php?tid=27078 set var1=abc set var2=123 echo 交换前: var1=%var1% var2=%var2% set var1=%var2%& set var2=%var1% echo 交换后: var1=%var1% var2=%var2% pause 输出空行echo输出空行 原生态的解释遗漏了echo另外一个重要功能:输出空行。在DOS脚本中,有时为了调试方便,加入一下空行。很多文章或者教程给出的解决方案都是在echo后面加一个点号echo.,这样就会输出空行。即: echo. 其实:echo输出空行的方法至少有十种: echo= echo, echo; echo+ echo/ echo[ echo] echo: echo. echo 这十种方法可以分为三组,每组的效率依次递减,第一组的效率是最高的。 修改cmd窗口大小、标题、字体、背景颜色①改变窗口大小 mode con cols=80 lines=80②设置cmd窗口的标题 title=设置窗口标题③改变字体及背景颜色 color [fb]例如: color 0a 说明: F:前景颜色,即字体颜色 B:背景颜色,即CMD窗口的背景颜色 颜色属性由两个十六进制数字指定 – 第一个为背景,第二个则为 前景。每个数字可以为以下任何值之一: 0 = 黑色 8 = 灰色 1 = 蓝色 9 = 淡蓝色 2 = 绿色 A = 淡绿色 3 = 湖蓝色 B = 淡浅绿色 4 = 红色 C = 淡红色 5 = 紫色 D = 淡紫色 6 = 黄色 E = 淡黄色 7 = 白色 F = 亮白色例如: "color 0a " 是在背景色为黑色上设置字体颜色为淡绿色。 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |