无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 51367|回复: 105

那位老师有些批处理的实例能否贴出来让偶等小鸟学习学习!

[复制链接]
发表于 2006-11-26 20:52:08 | 显示全部楼层 |阅读模式
希望能先看到一些相对简单点的,在网上搜的都看不到明白!
如果能有注解那就太感谢了!
发表于 2006-11-26 22:19:00 | 显示全部楼层
  先传一个没有注释的东西上来——每个都注释的话,确实比较烦琐,而手动测试几次之后,基本上都能明白是怎么回事的。若确实有需要注释的,请跟帖标明文件名。

DOS实例练习.rar

86.44 KB, 下载次数: 1045, 下载积分: 无忧币 -2

回复

使用道具 举报

 楼主| 发表于 2006-11-27 09:57:01 | 显示全部楼层
谢谢!谢谢!
不敢奢望都有注解!
有例子我就十分感谢了!!
感谢namejm 老师!感谢无优!!
回复

使用道具 举报

发表于 2006-11-27 16:38:38 | 显示全部楼层
嗨!namejm 兄要给你写注释居然不要,笨啊!
有此高手帮助,获益良多。
回复

使用道具 举报

发表于 2006-11-27 20:59:48 | 显示全部楼层
谢谢,收下载来琢磨琢磨!
回复

使用道具 举报

发表于 2006-11-27 23:38:49 | 显示全部楼层
正在学习批处理,可入门比较困难,收一个下来仔细研究一下。
回复

使用道具 举报

发表于 2006-11-28 02:14:50 | 显示全部楼层
不错,支持!
回复

使用道具 举报

发表于 2006-11-28 12:27:41 | 显示全部楼层
向批处理进军ing
回复

使用道具 举报

 楼主| 发表于 2006-11-29 22:29:04 | 显示全部楼层
偶的DOS基础真是有一点点弱!(暴汗!)
看3。BAT晕的有点喘不上气儿了!爬上来透口气儿!
set /a kk+=1   
这句最终自己也不能确定!希望namejm老师能帮忙解释下!
自己是这样理解的,设置KK为环境变量,最终结果是=1,现在是零??晕了!!越看帮助越晕!
ping 1.1.1.1 -n 2 -w 300>nul
ping这个IP,指定2次延时300毫秒无任何输出
换句话说就是延时600毫秒执行下一句
if "%kk%"="1" goto 11
如果变量KK=1那么跳转到11
下同
就这水平了,namejm老师多费心了!我这给您鞠躬了!
回复

使用道具 举报

发表于 2006-11-29 23:34:53 | 显示全部楼层
  set /a kk+=1是 set kk=%kk%+1 的缩写形式,也就是累加1的意思。如果最开始没有设置kk的值,用第一次用 set /a 来操作 kk 的时候,默认 kk 的值为0,当执行到 :55 的时候,set kk= 一句会把变量的值清空,第一次碰到 set /a 语句的时候,又会把 kk 的值重新设置为默认的0。
回复

使用道具 举报

 楼主| 发表于 2006-12-2 01:49:02 | 显示全部楼层
22.bat
if #%ii%==#10 goto yy
这两个#号是什么意思?
去掉效果是一样的啊!(至少看到的效果是一样的)
在有我现在看到%这个符号都哆嗦!怎么那里都用啊!那个和那个也不一样!!??
88.bat特意强调了不一样?
echo %~f0
echo %%~dp0
:这是显示%~dp0这个字符,看好了%的个数
%
%%
%ii%
该怎么理解它们?
回复

使用道具 举报

发表于 2006-12-2 07:28:12 | 显示全部楼层
  关于两个#号:这样做是防止出现空字符串。假设没有#号的话,一旦 %ii% 的值为空,则 ==左侧为空,那么,这个if语句就要出错,导致脚本自动退出。

  echo %~f0 用在CMD命令行中,echo %%~f0 用在批处理文件中,这个是 for 语句的一个规定,请看 for 的帮助信息:

  1. 对一组文件中的每一个文件执行某个特定命令。

  2. FOR %variable IN (set) DO command [command-parameters]

  3.   %variable  指定一个单一字母可替换的参数。
  4.   (set)      指定一个或一组文件。可以使用通配符。
  5.   command    指定对每个文件执行的命令。
  6.   command-parameters
  7.              为特定命令指定参数或命令行开关。

  8. 在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable
  9. 而不要用 %variable。……
复制代码

  百分号对之间夹字符串,表示是对该变量的引用,在变量延迟的时候,百分号对要换成感叹号对。
回复

使用道具 举报

发表于 2006-12-2 21:22:40 | 显示全部楼层
冒昧的问一句,dos7.1不能这样用set /a kk+=1吧?
回复

使用道具 举报

发表于 2006-12-2 21:26:20 | 显示全部楼层
  对纯DOS不熟悉,纯DOS下似乎不支持 set 命令的 /a 参数。
回复

使用道具 举报

 楼主| 发表于 2006-12-4 11:02:20 | 显示全部楼层
for的帮助我看了,这还算能理解!
主要是88.bat
@echo off
echo %~f0
echo @echo off
echo %~f0
echo %%~dp0
:这是显示%~dp0这个字符,看好了%的个数
这我就有点晕了,%~dp0 是显示当前批处理所在路径(试验知道的)为啥在+个%就不执行了,而只是个字符了呢??这有帮助吗?我应该怎么得到这些信息??
回复

使用道具 举报

发表于 2006-12-4 13:03:23 | 显示全部楼层
  这个变量扩展是由 for 语句的规则派生出来的。
回复

使用道具 举报

 楼主| 发表于 2006-12-4 17:50:16 | 显示全部楼层
不是很理解!算了不理解了,楞记吧!!知道也就算了!
能帮忙解释下%~dp0,这是从那里来的??有多少这样的变量(应该是叫变量吧??)?
都是作什么用的??(我知道可能会很多,但,我如何才能学习到这些知识呢??)
这些都是从实战中揣摩出来的?还是有文字的资料可以了解??
回复

使用道具 举报

 楼主| 发表于 2006-12-4 23:19:49 | 显示全部楼层
33.bat看不懂!这是要做什么的??
@echo off
cls
set /p ii=Enter file full path :
set /p uu=Enter you will find strings:
find /n "%uu%" %ii% >bagpipe.txt
for /f "eol=- tokens=1 delims=[]" %%i in (bagpipe.txt) do @echo %%i
del bagpipe.txt
pause
回复

使用道具 举报

 楼主| 发表于 2006-12-6 17:47:13 | 显示全部楼层
FOR语句看的好累
33。bat

@echo off
cls
set /p ii=Enter file full path :输入文件路径
set /p uu=Enter you will find strings:输入字符串
find /n "%uu%" %ii% >bagpipe.txt ::在文件中搜索字符串并显示行号
for /f "eol=- tokens=1 delims=[]" %%i in (bagpipe.txt) do @echo %%i
for语句就晕了,eol=-(忽略-开头的这行??)(那帮助中的eol=c           - 指一个行注释字符的结尾(就一个)是什么意思?)
tokens=1(第一个传递给for??)
那delims=[]应该怎么解释?我看它是最晕的,有它在输出不显示[],没它显示!那它到底是做什么的??这话应该怎么说??帮助说的是delims=xxx      - 指分隔符集。这个替换了空格和跳格键的 默认分隔符集。
del bagpipe.txt
pause

俺DOS基础实在是弱!郁闷!!
希望namejm老师表嫌俺笨啊!能在百忙之中抽点时间给指导指导!
谢谢,谢谢啦!!
回复

使用道具 举报

发表于 2006-12-6 18:06:17 | 显示全部楼层
Re 17#

  %~dp0 还是 for 语句的变量扩展的组合形式,其中,%0 是"形参",表示批处理文件本身,类似的还有%1~%9,一般用在 call 语句中。请看 for 的变量扩展描述:

  1. 另外,FOR 变量参照的替换已被增强。您现在可以使用下列
  2. 选项语法:

  3.      ~I         - 删除任何引号("),扩充 %I
  4.      %~fI        - 将 %I 扩充到一个完全合格的路径名
  5.      %~dI        - 仅将 %I 扩充到一个驱动器号
  6.      %~pI        - 仅将 %I 扩充到一个路径
  7.      %~nI        - 仅将 %I 扩充到一个文件名
  8.      %~xI        - 仅将 %I 扩充到一个文件扩展名
  9.      %~sI        - 扩充的路径只含有短名
  10.      %~aI        - 将 %I 扩充到文件的文件属性
  11.      %~tI        - 将 %I 扩充到文件的日期/时间
  12.      %~zI        - 将 %I 扩充到文件的大小
  13.      %~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩充
  14.                    到找到的第一个完全合格的名称。如果环境变量名
  15.                    未被定义,或者没有找到文件,此组合键会扩充到
  16.                    空字符串

  17. 可以组合修饰符来得到多重结果:

  18.      %~dpI       - 仅将 %I 扩充到一个驱动器号和路径
  19.      %~nxI       - 仅将 %I 扩充到一个文件名和扩展名
  20.      %~fsI       - 仅将 %I 扩充到一个带有短名的完整路径名
  21.      %~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
  22.                    到找到的第一个驱动器号和路径。
  23.      %~ftzaI     - 将 %I 扩充到类似输出线路的 DIR
复制代码


Re 19#

  for 语句功能十分强大,若能把它研究透,离高手也就不远了。但是非常不幸,MS自家的帮助信息居然有不少错误的表述,估计是哪位E文没学好的家伙翻译过来的。

  eol=- 实际上是忽略以 - 开头的行;delims= 表示以等号后面的符号为分隔符来提取文本信息,提取的时候,因为这些符号是做了分隔符的,所以提取出来的信息中是不会含有这些符号的,除非使用 tokens=1* 之类带星号的格式来提取;当 delims= 后只有一个符号的时候,还很容易理解,如果有多个符号的话,情况就变得十分复杂了,由于本人平时只注重使用,而不善于归纳总结,对这种情况也没多少可说的,只能建议你变换条件来反复测试。
回复

使用道具 举报

 楼主| 发表于 2006-12-6 20:30:41 | 显示全部楼层
原帖由 namejm 于 2006-12-6 06:06 PM 发表
  %~dp0 还是 for 语句的变量扩展的组合形式,其中,%0 是"形参",表示批处理文件本身,

哦,我说呢!原来%0是这个意思,我说我对这那该死的表怎么也找不到 %~dp0 在那啊!原来是这样!
MS的帮助真是让人受不了!!看了MS的帮助我想死的心都有!!NND,eol=c           - 指一个行注释字符的结尾(就一个)这句我怎么看也看不明白,敢情儿不是我理解能力不行,是MS误人啊!!
在这再次感谢namejm老师!谢谢,谢谢您无私的帮助!!向您致敬!!
回复

使用道具 举报

发表于 2006-12-7 10:20:39 | 显示全部楼层
想问一个namajm老师,批处理有没有办法将自身某一块或N块的内容输出为某一个文件?

例如本身批处理中有一个:start的块,如何将这块的内容用>>1.txt的方式输出成一个文件咧?
回复

使用道具 举报

发表于 2006-12-7 12:35:27 | 显示全部楼层
  在特定条件下,批处理能将自身某一块或某N块的内容输出为某一文件,这些条件有(满足其中一条即可):

  1、信息块本身有CMD能处理的起止标记;
  2、信息块位于文件中某些特定的行;

  以下是一些演示代码:

  1. @echo off
  2. :: 把以 :start 开始,goto :eof之前的信息段输出到test.txt
  3. cd.>test.txt
  4. set switch=1
  5. for /f "delims=" %%i in ('findstr .* "%~0"') do (
  6.     if /i "%%i"==":start" set switch=
  7.     if /i "%%i"=="goto :eof" set switch=1
  8.     if not defined switch >>test.txt echo.%%i
  9. )
  10. start test.txt
  11. exit

  12. :start
  13. @echo off
  14. echo hello world
  15. pause>nul
  16. goto :eof

  17. :end
  18. exit
复制代码

  1. @echo off
  2. :: 把 :start 标签段的信息段输出到test.txt(忽略空行)
  3. cd.>test.txt
  4. set num=0
  5. setlocal enabledelayedexpansion
  6. for /f "delims=" %%i in ('findstr .* "%~0"') do (
  7.     set /a num+=1
  8.     if !num! gtr 12 if !num! lss 17 >>test.txt echo.%%i
  9. )
  10. start test.txt
  11. exit

  12. :start
  13. @echo off

  14. echo hello world
  15. pause>nul
  16. goto :eof

  17. :end
  18. exit
复制代码

  1. @echo off
  2. :: 将 :start 之后的所有内容输出到 test.txt
  3. >test.txt more +7 "%~0"
  4. start test.txt
  5. goto :eof

  6. :start
  7. @echo off
  8. echo hello world
  9. pause>nul

  10. :next
  11. @echo off
  12. echo hell bbs.wuyou.net
  13. pause>nul
复制代码

[ 本帖最后由 namejm 于 2006-12-7 10:56 PM 编辑 ]
回复

使用道具 举报

发表于 2006-12-7 21:22:56 | 显示全部楼层
多谢namejm老师,敬个礼。
回复

使用道具 举报

 楼主| 发表于 2006-12-10 14:53:48 | 显示全部楼层
address.bat
@echo off
for /f "delims=: tokens=2" %%i in ('"dir /-c|find /i "winnt""') do echo %%i
for /f "delims=: tokens=2" %%i in ('"ipconfig|find /i "ip address""') do echo %%i
pause

开始这个‘’号和最后这个“”号,应该如何解释??我在作笔记,写到这里我不知道该如何表达!!?!
回复

使用道具 举报

发表于 2006-12-10 17:10:36 | 显示全部楼层
  for /f %%i in (set) do (command) 语句表示在最终对象为文本内容的时候进行循环,该语句有三种基本类型,各种类型的适用情况如下:

  ① 当 set 为文件名时,用 for /f %%i in (filename) do (command);
  ② 当 set 为字符串时,用双引号把字符串括起来:for /f %%i in ("string") do (command);
  ③ 当 set 为命令语句时,用单引号把命令语句括起来: for /f %%i in ('command1') do (command2);

  第3种情况下,如果 set 内用到了管道符号,则一般在管道符号前用转义符号^来连接前后语句,如 for /f "delims=: tokens=2" %%i in ('ipconfig^|find /i "ip address"') do echo %%i ;如果不使用转义符号^,则把管道符号前后语句都用双引号括起来,再在最外层使用单引号,也就变成了 for /f "delims=: tokens=2" %%i in ('"ipconfig|find /i "ip address""') do echo %%i 这样的语句。
回复

使用道具 举报

 楼主| 发表于 2006-12-11 22:47:24 | 显示全部楼层
echo %~dp0 >2.bat
echo %%~dp0 >>2.bat
这里的>和>>有什么区别?
回复

使用道具 举报

发表于 2006-12-11 23:34:53 | 显示全部楼层
  > 表示用执行结果覆盖目标文件,>> 表示把执行结果追加到目标文件。
回复

使用道具 举报

发表于 2006-12-11 23:42:01 | 显示全部楼层
跟着看了一下。觉得编译个bat。还不如写个程序,只要知道一行批处理:
调用它。
**。exe  ** ** ** **
回复

使用道具 举报

发表于 2006-12-12 10:14:12 | 显示全部楼层
  批处理无须编译,直接保存为cmd格式或bat格式就可以跑起来,SPKEEY 兄误解了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-3-29 13:46

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表