利用strings工具实现DOS下循环控制

strings.com 是强大的纯DOS环境下的文本处理工具。
在MS-DOS或PC-DOS下,如果需要对循环进行控制几乎很难,
最主要的原因是由于Set赋值命令无法对其进行加减法的运算。 
现在可以通过STRINGS中的参数进行控制而达到循化控制,
如下为命令实例:

set a
strings a=add 0,0

:loop
strings a=add %a%,1

if %a%==5 goto b
goto loop

:b
echo %a%

strings命令参数详解:

  1. strings [目标变量=]left 源字符串,要取的字符数量   〈从左边取源字符串的指定字符数量〉
  2. strings [目标变量=]right 源字符串,要取的字符数量   〈从右边取源字符串的指定字符数量〉
  3. strings [目标变量=]mid 源字符串,起止数,终止数   〈从中央取源字符串〉
  4. strings [目标变量=]lenght 源字符串   〈返回源字符串的字符长度〉
  5. strings [目标变量=]find 源字符串,字符   〈从源字符中查找指定的字符〉
  6. strings [目标变量=]findc 源字符串,字符   〈从源字符中查找指定的字符,区分大小写〉
  7. strings [目标变量=]lower 源字符串   〈将源字符串中的大写字母转换成小写字母〉
  8. strings [目标变量=]upper 源字符串   〈将源字符串中的小写字母转换成大写字母〉
  9. strings [目标变量=]char 字符 [字符1] [字符2]...   〈将字符转换成ASCII数字〉
  10. strings [目标变量=]val 数字 [数字1] [数字2]...   〈将数字转换成ASCII字符〉
  11. strings [目标变量=]filedrive 文件名   〈返回文件名所在的盘符〉
  12. strings [目标变量=]filedir 文件名   〈返回文件名所在的目录〉
  13. strings [目标变量=]filename 源文件名   〈返回源文件名的文件名,不要扩展名〉
  14. strings [目标变量=]fileext 源文件名   〈只返回源文件名的扩展名〉
  15. strings [目标变量=]addcommas 数字   〈将数字每隔三位用逗号隔开〉
  16. strings [目标变量=]repeat 重复多少,字符或数字   〈将字符或数字进行指定的重复〉
  17. strings [目标变量=]read 文件名,行数   〈读取文件中指定行数的内容〉
  18. strings [目标变量=]write 文件名,字符   〈将字符追加到文件中〉
  19. strings [目标变量=]filesize 文件名   〈返回文件的大小〉
  20. strings [目标变量=]linesize 文件名   〈返回文件内容的总行数〉
  21. strings [目标变量=]truename 文件名   〈返回文件的完整路径〉
  22. strings [目标变量=]filedate 文件名   〈返回文件的修改日期〉
  23. strings [目标变量=]filetime 文件名   〈返回文件的修改时间〉
  24. strings [目标变量=]ver   〈返回当前系统的DOS版本号〉
  25. strings [目标变量=]ask 提示字符串[,最大输入数][,1=*显示 2=不显示]   〈对话〉
  26. strings [目标变量=]inwin   〈如果在WINDOWS中的DOS窗口中运行则返回1〉
  27. strings [目标变量=]envfree   〈返回环境变量空间的空闲字节数〉
  28. strings [目标变量=]envsize   〈返回环境变量空间的总共大小〉
  29. strings [目标变量=]truever   〈返回当前DOS的真实版本号〉
  30. strings [目标变量=]files   〈返回当前同时访问的文件数量〉
  31. strings [目标变量=]lastdrive   〈返回当前系统可以访问最后有效的驱动器字母〉
  32. strings [目标变量=]codepage   〈返回当前系统活动的长文件代码页〉
  33. strings [目标变量=]country   〈返回当前系统设置的国家代码〉
  34. strings [目标变量=]biosdate   〈返回BIOS出厂的日期〉
  35. strings [目标变量=]getkey   〈返回按键的ASCII代码〉
  36. strings [目标变量=]add 数字1,数字2[,数字3]...   〈对数字进行+运算〉
  37. strings [目标变量=]sub 数字1,数字2[,数字3]...   〈对数字进行-运算〉
  38. strings [目标变量=]mul 数字1,数字2[,数字3]...   〈对数字进行×运算〉
  39. strings [目标变量=]div 数字1,数字2[,数字3]...   〈对数字进行÷运算〉
  40. strings [目标变量=]and 数字1,数字2[,数字3]...   〈对数字进行“逻辑与”运算〉
  41. strings [目标变量=]or 数字1,数字2[,数字3]...   〈对数字进行“逻辑或”运算〉
  42. strings [目标变量=]not 数字1,数字2[,数字3]...   〈对数字进行“逻辑取反”运算〉
  43. strings [目标变量=]memtotal   〈返回系统总共的常规内存大小〉
  44. strings [目标变量=]memfree   〈返回系统空闲的常规内存大小〉
  45. strings [目标变量=]xmstotal   〈返回系统总共的扩展内存大小〉
  46. strings [目标变量=]xmsfree   〈返回系统空闲的扩民内存大小〉
  47. strings [目标变量=]xmsver  〈返回当前扩展内存使用的驱动程序的版本号〉
  48. strings [目标变量=]emstotal   〈返回系统总共的扩充内存大小〉
  49. strings [目标变量=]emsfree   〈返回系统空闲的扩充内存大小〉
  50. strings [目标变量=]emsver   〈返回当前扩充内存使用的驱动程序的版本号〉
  51. strings [目标变量=]stringsver   〈返回STRINGS的版本号〉

STRINGS常用方法:

1、把文本文件 list.txt 包含的行数赋值给变量 ln

strings ln=linesize list.txt

2、把文本文件 list.txt 的大小传递给变量 fs

string fs=filesize list.txt

3、读取文本文件 list.txt 的第5行内容并赋值给变31333137量 ln

strings ln=read list.txt,5

4、把变量 n 在原有基础上+1 和 -1

strings n=add %n%,1
strings n=sub %n%,1

5、把字符串 ABCDEFG 中第四个字符以及后面共3个字符传递给变量 lx (DEF)

strings lx=mid ABCDEFG,4,3

6、查找字符串 ABCDEFG 中 D 所在的位置并赋值给变量 dx ,如果没找到 dx=0

strings dx=find ABCDEFG,D

7、找出字符串 ABCD EFG HIJ KLMN 中第二个单词并赋值给变量 l2

strings l2=parse ABCD EFG HIJ KLMN ,2

应用举例:

逐一显示文件 list.txt 各行内容

@echo off
rem 读取 list.txt 大小如果是 0 就转入 error 段
strings fs=filesize list.txt
if %fs%==0 goto error
rem 读取 list.txt 行数 并用 n 作计数器以循环方式显示 list.txt 各行内容。
strings l=linesize list.txt
strings l=add %l%,1
set n=0
:loop
strings n=add %n%,1
strings lx=read list.txt,%n%
echo %lx%
if %n%==%l% goto end
goto loop
:error
echo list.txt is null
:end
set fs=
set l=
set m=
set lx=

像我这样偶尔写写小程序的人,很多时候觉得 DOS 有了 strings.com 才会好用吧。
工具包差点忘记放上来了^_^
strings.zip

添加新评论