标题: [转贴] 浅谈批处理脚本的编写 - 4.绿色篇 [打印本页]
作者: HAT 时间: 2011-12-17 14:02 标题: 浅谈批处理脚本的编写 - 4.绿色篇
4.绿色篇
在达到目的的过程中,尽量少“排放”,因为无意之中产生的临时文件、临时注册表信息可能是造成日后垃圾信息堆积如山的罪魁祸首。
简单说就是不要污染环境。
4.1 避免以注册表为备忘录
注册表是系统中重要的组成部分之一,如果轻易该表它而不还原,可能产生乱七八糟的问题,清理起来也十分麻烦
再说对批而言,注册表的读写也是很繁琐费时的,所以即使用临时文件也比写注册表好一百倍。
4.2 不要大肆创建新文件、文件夹
【code1】- (for /f "delims=" %%a in (1.txt) do md %%a||echo %%a 是重复内容)2>nul
- ::经常见批友喜欢这样查找重复项或进行排序,其实这是下策
- ::首先是效率慢和污染太严重,其次文件与文件夹的名称有较严格的格式限制,极易误判
复制代码
【code2】- for /f "delims=" %%a in (1.txt) do (
- if defined .%%a echo %%a 是重复内容
- set .%%a=.
- )
- ::这个代码的兼容性虽然也很一般,但它绿色无污染(除变量外。。。。),不会产生大量的临时文件,1.txt内容少时效率也还过得去,相比前者而言要优越得多
复制代码
4.3 避免生成与外部命令同名的可执行文件
【code1】- echo echo 敲错门了吧?^&pause>findstr.bat
- findstr /?
- ::可执行文件是可以不输入后缀名来调用的,所以一定要留意,切记切记
复制代码
【code2】- echo echo 打酱油>临时.bat
- findstr /?
- ::换个名字就可以了
复制代码
4.4 变量避免与系统环境变量重名
【code】- set path=.\
- cmd /?
- ::改变系统变量后,可能会导致某些以系统变量为依据的脚本失效
- ::尤其是在需要调用外部命令的脚本中,不要擅自改变path变量的值,否则会找不到文件
复制代码
【code】- set time=对不起,请拨117
- echo %time%
- set time=
- echo %time%
- ::动态环境变量不在变量表中,它们的优先级低于变量表,所以当变量表中已经存在同名变量时,是不会去读取动态环境变量的
复制代码
4.5 注意剥夺新进程的继承权
在脚本中开启的新进程作为 cmd 的子进程是具有继承权的,会继承脚本的环境变量,大部分时候无关紧要,但有时候可能会造成影响。
【code1】- set @传家之宝=传子不传女,传内不传外
- cmd /c set @
- ::在这个子进程 cmd.exe 中,环境变量是继承自父进程的。
复制代码
【code2】- set @传家之宝=传子不传女,传内不传外
- start /i /w /b cmd /c set @
- ::好在我们可以请 start 这名律师用 /i 开关剥夺子进程的继承权。
复制代码
转自:http://tieba.baidu.com/p/1326838342
作者: cjiabing 时间: 2011-12-20 23:22
对于这位“全天占线”给我的感觉是与我们很熟悉却又不甚了解~
关于绿色篇我想重复一下:
在写代码的初期,往往需要产生临时文件,通过临时文件来跟踪程序的运行。在代码完成后,应当将这些多余的东西去掉。能用变量的就不用临时文件,能用命令的就不用变量。少用注册表等系统文件。当然这些东西,谈来谈去又谈到效率了,能不用的时候就不用,非用不可还得用。
一句话,一个程序应尽量在程序内部解决问题,避免过多干扰其他东西。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |