[关闭]
@fantaghiro 2016-06-21T01:02:30.000000Z 字数 11879 阅读 1480

华中红客批处理课程

批处理 学习笔记


讲真,这是我见过的最差劲的视频课了。没有之一!

第1课 什么是批处理

批处理文件是由一条条的DOS命令组成的普通文本文件,可以用记事本直接编辑或用DOS命令创建,也可以用DOS下的文本编辑器Edit.exe来编辑。在“命令提示”下键入批处理文件的名称,或者双击批处理文件,系统就会调用cmd.exe运行批处理程序。

一般情况下,每条命令占据一行。当然也可以将多条命令用特定符号(如: &、&&、|、|| 等)分隔后写入同一行中。还有就是像if、for等高级命令。

系统在解释运行批处理程序时,首先扫描整个批处理程序,然后从第一行代码开始向下逐句执行所有的命令、直至程序结尾或预见exit命令或出错意外退出。

  1. ping http://www.baidu.com

ctrl+c 可以终止

第2课 简单的批处理命令(1)

echo命令

一、echo命令简介
打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,命令将显示当前回显设置

语法:

  1. echo [{on|off}] [message]
  2. Sample: @echo off / echo hello world

在实际应用中我们会把这条命令和重定向符号(也成为管道符号,一般用 > >> ^)结合来实现输入一些命令到特定的文件中。

举例:

  1. @echo off
  2. echo 欢迎您来到华中红客安全网学习!
  3. pause

二、详细解释:

(1) echo off 关闭回显(即批处理中的命令语句不会显示)

(2) echo on 打开回显

(3) 符号“@”的意思是不现实它后面的命令语句,只显示命令执行的结果

例如:

  1. echo 你好
  2. @echo 你好
  3. pause

(4) echo用于显示

echo命令的作用有两个、一个是在cmd上显示一行内容,如:echo 欢迎来到华中红客安全网学习!

还有一个是显示关闭命令的回显:echo off

我们在echo off命令前加一个“@”符号是为了不让echo off这条命令本身显示出来,可以让批处理达到整体的美观。

例子:

  1. @echo off
  2. echo 你好
  3. echo 你好
  4. pause

注:pause命令就是暂停的意思,防止批处理执行完毕后直接退出,执行到pause命令时cmd就会显示“请按任意键继续”。

三、小技巧

如果大家对哪个DOS命令不明白,可以通过输入“命令”/?来得到系统提供的帮助信息,也可以在“开始”→“运行”中输入“hh ntcmds.chm::ntcmds.htm”来得到更详细的命令行帮助

四、实例

  1. @echo off
  2. echo 正在清除系统垃圾文件,请稍后。。。
  3. del /s /f /q %systemdrive%\*.tmp >nul 2>nul
  4. del /s /f /q %systemdrive%\*.gid >nul 2>nul
  5. del /s /f /q %systemdrive%\*.chk >nul 2>nul
  6. del /s /f /q %systemdrive%\*.old >nul 2>nul
  7. del /s /f /q "%userprofile%\local settings\temp\*.*" >nul 2>nul
  8. del /s /f /q "%userprofile%\recent\*.*" >nul 2>nul
  9. del /s /f /q "userprofile%\cookies\*.*" >nul 2>nul
  10. del /s /f /q "%userprofile%\local settings\history\*.*" >nul 2>nul
  11. del /s /f /q "%windir%\temp\*.*" >nul 2>nul
  12. del /s /f /q "%windir%\prefetch\*.*" >nul 2>nul
  13. echo 垃圾文件清理完毕!
  14. echo. & pause

上面是一个清除系统垃圾文件的批处理程序。主要用到了del相关参数。另外还有%systemdrive%、%userprofile%,这些其实是系统变量,我们可以通过echo %userprofile%来查看它代表的是系统中的哪个目录

*.tmp是扩展名为.tmp的文件

nul 2>nul 的意思是将命令执行时的信息或者错误全部给屏蔽掉。

del命令

删除文件

例如:

  1. del d:\hongke.txt

del命令的几个重要参数:

第3课 简单的批处理命令(2)

cls命令

清除屏幕。执行该命令后,屏幕上所有信息都被清除,光标重新定位至屏幕左上角。

REM和::

REM为注释命令,一般用来给程序加上注解。该命令后的内容不被执行,但能回显。

其次,::也可以起到rem的注释作用,而且更简洁有效;但有两点需要注意:

行内注释格式:%注释内容% (不常用,慎用)

pause命令

暂停命令。运行pause命令时,将显示如下消息:

press any key to continue ... (请按任意键继续……)

  1. @echo off
  2. :begin
  3. copy G:\*.* d:\back
  4. echo 请插入另一张光盘……
  5. pause
  6. goto begin

第4课 简单的批处理命令(3)

call命令

CALL命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后,再继续执行原来的批处理

  1. CALL command

调用一条批处理命令,和直接执行命令效果一样,特殊情况下很有用,比如变量的多级嵌套。在批处理编程中,可以根据一定条件生成命令字符串,用call可以执行该字符串,见例子:

  1. CALL [drive:][path]filename [batch-parameters]

调用的其他批处理程序。finename参数必须具有.bat或.cmd扩展名。

  1. CALL :label arguments

调用本文件内命令段,相当于子程序。被调用的命令段以标签:label开头,以命令goto :eof结尾。

另外,批脚本文本参数参照(%0, %1 等等)已如下改变:

批脚本里的%*指出所有的参数(如%1 %2 %3 %4 %5 ...)

批参数(%n)的替代已被增强。你可以使用以下语法:

参数 意义
%~1 删除引号('')、扩充%1
%~f1 将%1扩充到一个完全合格的路径名
%~d1 仅将%1扩充到一个驱动器号
%~p1 仅将%1扩充到一个路径
%~n1 仅将%1扩充到一个文件名
%~x1 仅将%1扩充到一个文件扩展名
%~s1 扩充的路径只含有短名
%~a1 将%1扩充到文件属性
%~t1 将%1扩充到文件的日期/时间
%~z1 将%1扩充到文件的大小
%~$PATH:1 查找列在PATH环境变量的目录,并将%1扩充到找到第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串,可以组合修订符来取得多重结果
%~dp1 只将%1扩展到驱动器号和路径
%~nx1 只将%1扩展到文件名和扩展名
%~dp$PATH:1 在列在PATH环境变量中的目录里查找%1,并扩展到找到的第一个文件的驱动器号和路径
%~ftza1 将%1扩展到类似DIR的输出行

在上面的例子中,%1和PATH可以被其他有效数值替换。%~语法被一个有效参数号码终止。%~修订符不能跟%*使用

注意:参数扩充时不理会参数所代表的文件是否真实存在,均以当前目录进行扩展。理解上面的知识,下面的例子很关键:

  1. @echo off
  2. Echo 产生一个临时文件 > tmp.txt
  3. Rem 下行先保存当前目录,再将c:\windows设为当前目录
  4. pushd c:\windows
  5. Call :sub tmp.txt
  6. Rem 下行恢复前次的当前目录
  7. Popd
  8. Call :sub tmp.txt
  9. pause
  10. Del tmp.txt
  11. exit
  12. :sub
  13. Echo 删除引号:%~1
  14. Echo 扩充到路径:%~f1
  15. Echo 扩充到一个驱动器号:%~d1
  16. Echo 扩充到一个路径:%~p1
  17. Echo 扩充到一个文件名:%~n1
  18. Echo 扩充到一个文件扩展名:%~x1
  19. Echo 扩充的路径只含有短名:%~s1
  20. Echo 扩充到文件属性:%~a1
  21. Echo 扩充到文件的日期/时间:%~t1
  22. Echo 扩充到文件的大小:%~z1
  23. Echo 扩展到驱动器号和路径:%~dp1
  24. Echo 扩展到文件名和扩展名:%~nx1
  25. Echo 扩展到类似DIR的输出行:%~ftza1
  26. Echo.
  27. Goto :eof

以上的输出结果如下:

  1. 删除引号:tmp.txt
  2. 扩充到路径:c:\Windows\tmp.txt
  3. 扩充到一个驱动器号:c:
  4. 扩充到一个路径:\Windows\
  5. 扩充到一个文件名:tmp
  6. 扩充到一个文件扩展名:.txt
  7. 扩充的路径只含有短名:c:\Windows\tmp.txt
  8. 扩充到文件属性:
  9. 扩充到文件的日期/时间:
  10. 扩充到文件的大小:
  11. 扩展到驱动器号和路径:c:\Windows\
  12. 扩展到文件名和扩展名:tmp.txt
  13. 扩展到类似DIR的输出行:c:\Windows\tmp.txt
  14. 删除引号:tmp.txt
  15. 扩充到路径:F:\BaiduYunDownload\华中红客2012批处理培训班{黑客教程小组}\华中红客2
  16. 012批处理培训班\第4课:简单批处理命令(3\tmp.txt
  17. 扩充到一个驱动器号:F:
  18. 扩充到一个路径:\BaiduYunDownload\华中红客2012批处理培训班{黑客教程小组}\华中红
  19. 2012批处理培训班\第4课:简单批处理命令(3\
  20. 扩充到一个文件名:tmp
  21. 扩充到一个文件扩展名:.txt
  22. 扩充的路径只含有短名:F:\BAIDUY~1\华中红~1\华中红~1\第4课~1\tmp.txt
  23. 扩充到文件属性:--a--c---
  24. 扩充到文件的日期/时间:2016/04/25 14:36
  25. 扩充到文件的大小:19
  26. 扩展到驱动器号和路径:F:\BaiduYunDownload\华中红客2012批处理培训班{黑客教程小组}
  27. \华中红客2012批处理培训班\第4课:简单批处理命令(3\
  28. 扩展到文件名和扩展名:tmp.txt
  29. 扩展到类似DIR的输出行:--a--c--- 2016/04/25 14:36 19 F:\BaiduYunDownload\华中红
  30. 2012批处理培训班{黑客教程小组}\华中红客2012批处理培训班\第4课:简单批处理命令
  31. 3\tmp.txt

例子:

  1. set aa=123456
  2. set cmdstr=echo %aa%
  3. call %cmdstr%
  4. pause

本例子如果不用call,而直接运行%cmdstr%,将显示结果%aa%,而不是123456。

第5课 简单的批处理命令(4)

start命令

调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用,如:

  1. start calc.exe
  2. ::上述代码可以打开windows的计算器。

常用参数:

执行的应用程序是32-位GUI应用程序时,CMD.exe不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。例如:

  1. start explorer d:\
  2. ::调用图形界面打开D

第6课 简单的批处理命令(5)

goto命令

在批处理中允许以“:XXX”来构建一个标号,然后用 goto xxx 跳转到标号 :xxx 处,然后执行标号后的命令。例如:

  1. if {%1}=={} goto noparms
  2. if "%2"=="" goto noparms

标签的名字可以随便起,但最好是有意义的字符串。前面加个冒号用来表示这个字符串是标签。goto命令就是根据这个冒号(:)来寻找下一步跳到哪里。最好有一些说明,这样别人才能了解你的意图。

例如:

  1. @echo off
  2. :start
  3. set /a var+=1
  4. echo %var%
  5. if %var% leq 3 GOTO start
  6. ::leq代表小于
  7. pause

上面代码运行显示:

  1. 1
  2. 2
  3. 3
  4. 4

第7课 简单的批处理命令(6)

set命令

set的作用是设置环境变量。

例子:

  1. C:\>set blaster=a220 i5 d1
  2. ::设置声卡的参数
  3. C:\>set path=c:\dos
  4. ::pathc:\dos含义相同

显示、设置或删除变量

需要说明的是,批处理中的变量是不区分类型的。比如执行set aa=345后,变量 aa 的值既可以被视为数字345,也可以被视为字符串345。

set命令具有扩展功能,如用作交互输入、字符串处理、数值计算等,属于高级命令范畴。

第8课 批处理符号(1)

一、@

这个字符在批处理中的意思是关闭当前行的回显。

对比下面两个例子:

  1. echo off
  2. dir d:\
  3. pause

  1. @echo off
  2. dir d:\
  3. pause

二、>

这个字符的意思是传递并且覆盖,它所起的作用是将运行的回显结果传递到后面的范围(后边可以是文件,也可以是默认的系统控制台)

比如1.txt的文件内容是:1+1

使用命令:dir *.txt >1.txt

这时候 1.txt的内容就变成了 > 符号前命令的回显内容。

三、>>

这个符号的作用于 > 有点类似,但它们的区别是 >> 是传递并在文件的末尾追加,而 > 是覆盖。

第9课 批处理符号(2)

四、|

这是一个管道传输命令,意思是将上一个命令执行的结果传到下一个命令去处理

例如:

  1. dir c:\|find "txt"

以上命令是查找c:\所有,并发现txt字符串

find的功能请用 find /? 自行查看

在不使用format的自动格式化参数时,我是这样来自动格式化A盘的:

  1. echo y|format a: /s /q /v:system

用过format的都知道,在格盘时要输入y来确认是否格盘。这个命令前加上echo y,并用|字符将echo y的结果传给了format命令,从而达到自动输入y的目的。(这条命令有危害性,测试时须谨慎)

五、^

^ 是对特殊符号 \<、>、& 的前导字符。在命令中它将以上三个符号的特殊功能去掉,仅仅只把它们当成符号而不使用它们的特殊意义。

比如:

  1. echo test ^>1.txt

六、&

这个符号允许在一行中使用两个以上不同的命令。当第一个命令执行失败了,也不影响后边的命令执行。

比如:

  1. dir z:\ & dir y:\ & dir c:\

以上命令会连续显示z、y、c盘的内容,不理会该盘是否存在。

第10课 批处理符号(3)

七、&&

这个命令和上边的类似,区别是用这个&&的话,第一个命令失败时,后边的命令也不会执行。

  1. dir z:\ && dir y:\ && dir c:\

八、""

双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法:

  1. cd "program files"
  2. cd progra~1
  3. cd pro*

以上三种方法都可以进入program files这个目录。

九、,

逗号相当于空格,在某些情况下“,”可以用来当作空格使

比如:

  1. dir,c:\

十、;

分号,当命令相同时,可以将不同目标用;来隔离。但执行效果不变。如执行过程中发生错误,则返回错误报告,程序也不会执行。例如:

  1. dir c:\;d:\;e:\;f:\

以上命令相当于:

  1. dir c:\
  2. dir d:\
  3. dir e:\
  4. dir f:\

第11课 常用DOS命令(1)

【文件夹管理】

cd

cd命令来改变当前目录。进入子目录:cd 子目录名;返回父目录:cd ..;回到根目录:cd \。\就表示根目录。

md

md命令用来创建目录。

rd

  1. 删除的目录不能有子目录
  2. 删除的目录不能有文件
  3. 不能删除当前目录
  4. 根目录不能删除

tree

tree 显示命令树结构
适用场合 查看所有的子目录
用法 tree [盘符] 显示所有的子目录树
tree /f 显示每个文件夹中文件的名称
tree /a 使用ASCII字符,而不使用扩展字符
例子 c:\windows>tree /a

path

在dos提示符下,如果我们要执行某个可执行文件,电脑会在磁盘上寻找这个文件。如果不经过特殊处理,它只在当前目录下寻找。如果没有找到就会提示出错。

为了解决这个问题,dos提供了一条path命令,如果在path命令中定义了某个目录,那么你在任何地方,都可以直接执行path中指定目录里的文件。

path命令格式简单,比如:path=c:\dos;c:\windows;c:\ 这条命令就是说,当我们执行一个文件时,电脑先在当前目录下查找这个文件,找到则执行,如果没找到,则电脑按照path命令所指定的目录顺序去查找,先在c盘dos目录下,然后是windows目录下,最后在c盘根目录下寻找这个文件。

xcopy

xcopy 拷贝目录和文件
适用场合 在进行连同子目录一起拷贝时很有用,在拷贝大量文件时比copy命令要快得多
用法 xcopy [文件名] [目录] 将指定文件拷贝到指定目录
xcopy [源目录] [目的目录] 将源目录连子目录拷贝到目的目录下
xcopy *.* [目录] /s 将文件与非空子目录拷贝到指定目录
其他常用参数还有: v 拷贝后校验,会影响速度
e 与s类似,但即使子目录是空的也会拷贝

第12课 常用DOS命令(2)

【文件管理】

type

type命令的格式:type 文件名。朱翊,除了扩展名是txt的文件,对其他文件使用type,有可能屏幕上会出现很多怪符号,还会嘀嘀乱叫。

copy

例子:根目录下有一个文件叫做autoexec.bat,如果我们想将它复制一份叫做autoexec.old,就可以输入copy autoexec.bat autoexec.old。键入dir,除原有的autoexec.bat文件外,出现了一个autoexec.old文件,且这两个文件的大小一样。

如果我们想把dos目录下的edit.com复制到当前目录,就敲入copy c:\dos\edit.com。(注意,省略了目的目录名和文件名),源文件名是C盘根目录下dos目录中的edit.com文件。在这里指出了所在的驱动器及目录,而目的文件被省略了,这表示将文件复制到当前目录中,名字不变,也是edit.com。

copy命令也可以使用通配符,例如要复制C盘根目录下所有扩展名是bat的文件到zht目录里,可以输入copy c:\*.bat c:\zht

del

语法:del 文件名

可以使用通配符:例如,del *.tmp就是把所有扩展名是tmp的文件都删除。

删除当前目录中的所有文件,命令很简单:del *.*del .

del *.*del .一般用于在删除子目录之前,先删除目录中的所有文件。

del命令还可以删除非当前目录中的文件,例如删除C盘temp目录内的所有文件,正确方法是输入del c:\temp\.del c:\temp\*.*,然后再输入y表示确认。

move

move 移动文件,改目录名
适用场合 移动文件到别的目录
用法 move [文件名] [目录] 移动文件至新目录下
move [目录名] [目录名] 改目录名
例子 c:\>move c:\autoexec.bat c:\old 移动autoexec.bat文件至old目录下
c:\>move c:\config.sys c:\temp 移动config.sys文件至old目录下

ren

ren命令的格式是:ren 源文件名 目的文件名

例如把abc.txt改成bne.dat,就可以输入ren abc.txt bne.dat

如果用ren命令更改非当前目录中的文件名,那么源文件名和目的文件名要在同一个目录内。

第13课 常用DOS命令(3)

【网络命令】

ping

ping命令的语法格式:

  1. ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [-j -Host list] | [-k Host-list] [-w timeout] destination-list

ftp

FTP的命令行格式:FTP-v-d-i-n-g[主机名]

其中:
- -v 显示远程服务器的所有响应信息
- -n 限制FTP的自动登录,即不使用
- -d 使用调试方式
- -g 取消全局文件名

一般写法:ftp -n -s:[[drive:][path]

上面的filename为ftp命令文件,包括登录IP地址,用户名、密码、操作命令等,例如:

  1. open 90.52.8.3 #打开ip
  2. user iware #用户为iware
  3. password8848 #密码
  4. bin #二进制传输模式
  5. prompt
  6. cd tmp1 #切换至iware用户下的tmp1目录
  7. pwd
  8. lcd d:\download #本地目录
  9. mget * #下载tmp1目录下的所有文件
  10. bye #退出ftp

net

(1) net share - 查看共享命令:

(2) net user - 查看本地的用户列表

(3) net localgroup administrators - 查看管理员组里的用户(即权限为管理员的用户)

注意:1. 增加到某个组里的用户必须是已经被创建过的用户。 2.增加到的组必须为存在的组.

(4) net start - 查看已经启动的服务列表

注意:要想成功的开启一个服务,前提是它被停用了,而不是被禁止

(5) net stop 服务名 - 停止某个服务

注意:停止的服务必须是已经启动的,而不是已经停止或是被禁止的

telnet

telnet命令的一般形式为:telnet 主机名/IP。其中“主机名/IP”是要连接的远程机的主机名或IP地址。

例: telnet 192.168.0.1

如果这一命令执行成功,将从远程机上得到login:提示符。

使用telnet命令登录的过程如下:$ telnet 主机名/IP 启动telnet会话。

一旦telnet成功地连接到远程系统上,就显示登录信息并提示用户输人用户名和口令。如果用户名和口令输入正确,就能成功登录并在远程系统上工作。在 telnet提示符后面可以输入很多命令,用来控制telnet会话过程,在telnet联机帮助手册中对这些命令有详细的说明。

ipconfig

语法:

ipconfig [/all] [/renew [Adapter]] [/release [Adapter]] [/flushdns] [/displaydns] [/registerdns] [/showclassid Adapter] [/setclassid Adapter [ClassID]]

参数:

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注