Board logo

标题: [转贴] 浅谈批处理脚本的编写 - 4.绿色篇 [打印本页]

作者: HAT    时间: 2011-12-17 14:02     标题: 浅谈批处理脚本的编写 - 4.绿色篇

4.绿色篇
  在达到目的的过程中,尽量少“排放”,因为无意之中产生的临时文件、临时注册表信息可能是造成日后垃圾信息堆积如山的罪魁祸首。
  简单说就是不要污染环境。

4.1 避免以注册表为备忘录
  注册表是系统中重要的组成部分之一,如果轻易该表它而不还原,可能产生乱七八糟的问题,清理起来也十分麻烦
  再说对批而言,注册表的读写也是很繁琐费时的,所以即使用临时文件也比写注册表好一百倍。

4.2 不要大肆创建新文件、文件夹
【code1】
  1. (for /f "delims=" %%a in (1.txt) do md %%a||echo %%a 是重复内容)2>nul
  2. ::经常见批友喜欢这样查找重复项或进行排序,其实这是下策
  3. ::首先是效率慢和污染太严重,其次文件与文件夹的名称有较严格的格式限制,极易误判
复制代码
【code2】
  1. for /f "delims=" %%a in (1.txt) do (
  2.    if defined .%%a echo %%a 是重复内容
  3.    set .%%a=.
  4. )
  5. ::这个代码的兼容性虽然也很一般,但它绿色无污染(除变量外。。。。),不会产生大量的临时文件,1.txt内容少时效率也还过得去,相比前者而言要优越得多
复制代码
4.3 避免生成与外部命令同名的可执行文件
【code1】
  1. echo echo 敲错门了吧?^&pause>findstr.bat
  2. findstr /?
  3. ::可执行文件是可以不输入后缀名来调用的,所以一定要留意,切记切记
复制代码
【code2】
  1. echo echo 打酱油>临时.bat
  2. findstr /?
  3. ::换个名字就可以了
复制代码
4.4 变量避免与系统环境变量重名
【code】
  1. set path=.\
  2. cmd /?
  3. ::改变系统变量后,可能会导致某些以系统变量为依据的脚本失效
  4. ::尤其是在需要调用外部命令的脚本中,不要擅自改变path变量的值,否则会找不到文件
复制代码
【code】
  1. set time=对不起,请拨117
  2. echo %time%
  3. set time=
  4. echo %time%
  5. ::动态环境变量不在变量表中,它们的优先级低于变量表,所以当变量表中已经存在同名变量时,是不会去读取动态环境变量的
复制代码
4.5 注意剥夺新进程的继承权
  在脚本中开启的新进程作为 cmd 的子进程是具有继承权的,会继承脚本的环境变量,大部分时候无关紧要,但有时候可能会造成影响。
【code1】
  1. set @传家之宝=传子不传女,传内不传外
  2. cmd /c set @
  3. ::在这个子进程 cmd.exe 中,环境变量是继承自父进程的。
复制代码
【code2】
  1. set @传家之宝=传子不传女,传内不传外
  2. start /i /w /b cmd /c set @
  3. ::好在我们可以请 start 这名律师用 /i 开关剥夺子进程的继承权。
复制代码


转自:http://tieba.baidu.com/p/1326838342
作者: cjiabing    时间: 2011-12-20 23:22

对于这位“全天占线”给我的感觉是与我们很熟悉却又不甚了解~
关于绿色篇我想重复一下:
在写代码的初期,往往需要产生临时文件,通过临时文件来跟踪程序的运行。在代码完成后,应当将这些多余的东西去掉。能用变量的就不用临时文件,能用命令的就不用变量。少用注册表等系统文件。当然这些东西,谈来谈去又谈到效率了,能不用的时候就不用,非用不可还得用。
一句话,一个程序应尽量在程序内部解决问题,避免过多干扰其他东西。




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2