@fantaghiro
2016-06-21T09:02:30.000000Z
字数 11879
阅读 1953
批处理
学习笔记
讲真,这是我见过的最差劲的视频课了。没有之一!
批处理文件是由一条条的DOS命令组成的普通文本文件,可以用记事本直接编辑或用DOS命令创建,也可以用DOS下的文本编辑器Edit.exe来编辑。在“命令提示”下键入批处理文件的名称,或者双击批处理文件,系统就会调用cmd.exe运行批处理程序。
一般情况下,每条命令占据一行。当然也可以将多条命令用特定符号(如: &、&&、|、|| 等)分隔后写入同一行中。还有就是像if、for等高级命令。
系统在解释运行批处理程序时,首先扫描整个批处理程序,然后从第一行代码开始向下逐句执行所有的命令、直至程序结尾或预见exit命令或出错意外退出。
ping http://www.baidu.com
ctrl+c 可以终止
一、echo命令简介
打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,命令将显示当前回显设置
语法:
echo [{on|off}] [message]
Sample: @echo off / echo hello world
在实际应用中我们会把这条命令和重定向符号(也成为管道符号,一般用 > >> ^)结合来实现输入一些命令到特定的文件中。
举例:
@echo off
echo 欢迎您来到华中红客安全网学习!
pause
二、详细解释:
(1) echo off 关闭回显(即批处理中的命令语句不会显示)
(2) echo on 打开回显
(3) 符号“@”的意思是不现实它后面的命令语句,只显示命令执行的结果
例如:
echo 你好
@echo 你好
pause
(4) echo用于显示
echo命令的作用有两个、一个是在cmd上显示一行内容,如:echo 欢迎来到华中红客安全网学习!
还有一个是显示关闭命令的回显:echo off
我们在echo off命令前加一个“@”符号是为了不让echo off这条命令本身显示出来,可以让批处理达到整体的美观。
例子:
@echo off
echo 你好
echo 你好
pause
注:pause命令就是暂停的意思,防止批处理执行完毕后直接退出,执行到pause命令时cmd就会显示“请按任意键继续”。
三、小技巧
如果大家对哪个DOS命令不明白,可以通过输入“命令”/?来得到系统提供的帮助信息,也可以在“开始”→“运行”中输入“hh ntcmds.chm::ntcmds.htm”来得到更详细的命令行帮助
四、实例
@echo off
echo 正在清除系统垃圾文件,请稍后。。。
del /s /f /q %systemdrive%\*.tmp >nul 2>nul
del /s /f /q %systemdrive%\*.gid >nul 2>nul
del /s /f /q %systemdrive%\*.chk >nul 2>nul
del /s /f /q %systemdrive%\*.old >nul 2>nul
del /s /f /q "%userprofile%\local settings\temp\*.*" >nul 2>nul
del /s /f /q "%userprofile%\recent\*.*" >nul 2>nul
del /s /f /q "userprofile%\cookies\*.*" >nul 2>nul
del /s /f /q "%userprofile%\local settings\history\*.*" >nul 2>nul
del /s /f /q "%windir%\temp\*.*" >nul 2>nul
del /s /f /q "%windir%\prefetch\*.*" >nul 2>nul
echo 垃圾文件清理完毕!
echo. & pause
上面是一个清除系统垃圾文件的批处理程序。主要用到了del相关参数。另外还有%systemdrive%、%userprofile%,这些其实是系统变量,我们可以通过echo %userprofile%来查看它代表的是系统中的哪个目录
*.tmp是扩展名为.tmp的文件
nul 2>nul 的意思是将命令执行时的信息或者错误全部给屏蔽掉。
删除文件
例如:
del d:\hongke.txt
del命令的几个重要参数:
清除屏幕。执行该命令后,屏幕上所有信息都被清除,光标重新定位至屏幕左上角。
REM为注释命令,一般用来给程序加上注解。该命令后的内容不被执行,但能回显。
其次,::也可以起到rem的注释作用,而且更简洁有效;但有两点需要注意:
行内注释格式:%注释内容% (不常用,慎用)
暂停命令。运行pause命令时,将显示如下消息:
press any key to continue ... (请按任意键继续……)
@echo off
:begin
copy G:\*.* d:\back
echo 请插入另一张光盘……
pause
goto begin
CALL命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后,再继续执行原来的批处理
CALL command
调用一条批处理命令,和直接执行命令效果一样,特殊情况下很有用,比如变量的多级嵌套。在批处理编程中,可以根据一定条件生成命令字符串,用call可以执行该字符串,见例子:
CALL [drive:][path]filename [batch-parameters]
调用的其他批处理程序。finename参数必须具有.bat或.cmd扩展名。
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可以被其他有效数值替换。%~语法被一个有效参数号码终止。%~修订符不能跟%*使用
注意:参数扩充时不理会参数所代表的文件是否真实存在,均以当前目录进行扩展。理解上面的知识,下面的例子很关键:
@echo off
Echo 产生一个临时文件 > tmp.txt
Rem 下行先保存当前目录,再将c:\windows设为当前目录
pushd c:\windows
Call :sub tmp.txt
Rem 下行恢复前次的当前目录
Popd
Call :sub tmp.txt
pause
Del tmp.txt
exit
:sub
Echo 删除引号:%~1
Echo 扩充到路径:%~f1
Echo 扩充到一个驱动器号:%~d1
Echo 扩充到一个路径:%~p1
Echo 扩充到一个文件名:%~n1
Echo 扩充到一个文件扩展名:%~x1
Echo 扩充的路径只含有短名:%~s1
Echo 扩充到文件属性:%~a1
Echo 扩充到文件的日期/时间:%~t1
Echo 扩充到文件的大小:%~z1
Echo 扩展到驱动器号和路径:%~dp1
Echo 扩展到文件名和扩展名:%~nx1
Echo 扩展到类似DIR的输出行:%~ftza1
Echo.
Goto :eof
以上的输出结果如下:
删除引号:tmp.txt
扩充到路径:c:\Windows\tmp.txt
扩充到一个驱动器号:c:
扩充到一个路径:\Windows\
扩充到一个文件名:tmp
扩充到一个文件扩展名:.txt
扩充的路径只含有短名:c:\Windows\tmp.txt
扩充到文件属性:
扩充到文件的日期/时间:
扩充到文件的大小:
扩展到驱动器号和路径:c:\Windows\
扩展到文件名和扩展名:tmp.txt
扩展到类似DIR的输出行:c:\Windows\tmp.txt
删除引号:tmp.txt
扩充到路径:F:\BaiduYunDownload\华中红客2012批处理培训班{黑客教程小组}\华中红客2
012批处理培训班\第4课:简单批处理命令(3)\tmp.txt
扩充到一个驱动器号:F:
扩充到一个路径:\BaiduYunDownload\华中红客2012批处理培训班{黑客教程小组}\华中红
客2012批处理培训班\第4课:简单批处理命令(3)\
扩充到一个文件名:tmp
扩充到一个文件扩展名:.txt
扩充的路径只含有短名:F:\BAIDUY~1\华中红~1\华中红~1\第4课~1\tmp.txt
扩充到文件属性:--a--c---
扩充到文件的日期/时间:2016/04/25 14:36
扩充到文件的大小:19
扩展到驱动器号和路径:F:\BaiduYunDownload\华中红客2012批处理培训班{黑客教程小组}
\华中红客2012批处理培训班\第4课:简单批处理命令(3)\
扩展到文件名和扩展名:tmp.txt
扩展到类似DIR的输出行:--a--c--- 2016/04/25 14:36 19 F:\BaiduYunDownload\华中红
客2012批处理培训班{黑客教程小组}\华中红客2012批处理培训班\第4课:简单批处理命令
(3)\tmp.txt
例子:
set aa=123456
set cmdstr=echo %aa%
call %cmdstr%
pause
本例子如果不用call,而直接运行%cmdstr%,将显示结果%aa%,而不是123456。
调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用,如:
start calc.exe
::上述代码可以打开windows的计算器。
常用参数:
执行的应用程序是32-位GUI应用程序时,CMD.exe不等应用程序终止就返回命令提示。如果在命令脚本内执行,该新行为则不会发生。例如:
start explorer d:\
::调用图形界面打开D盘
在批处理中允许以“:XXX”来构建一个标号,然后用 goto xxx 跳转到标号 :xxx 处,然后执行标号后的命令。例如:
if {%1}=={} goto noparms
if "%2"=="" goto noparms
标签的名字可以随便起,但最好是有意义的字符串。前面加个冒号用来表示这个字符串是标签。goto命令就是根据这个冒号(:)来寻找下一步跳到哪里。最好有一些说明,这样别人才能了解你的意图。
例如:
@echo off
:start
set /a var+=1
echo %var%
if %var% leq 3 GOTO start
::leq代表小于
pause
上面代码运行显示:
1
2
3
4
set的作用是设置环境变量。
例子:
C:\>set blaster=a220 i5 d1
::设置声卡的参数
C:\>set path=c:\dos
::path与c:\dos含义相同
显示、设置或删除变量
需要说明的是,批处理中的变量是不区分类型的。比如执行
set aa=345
后,变量 aa 的值既可以被视为数字345,也可以被视为字符串345。
set命令具有扩展功能,如用作交互输入、字符串处理、数值计算等,属于高级命令范畴。
这个字符在批处理中的意思是关闭当前行的回显。
对比下面两个例子:
echo off
dir d:\
pause
和
@echo off
dir d:\
pause
这个字符的意思是传递并且覆盖,它所起的作用是将运行的回显结果传递到后面的范围(后边可以是文件,也可以是默认的系统控制台)
比如1.txt的文件内容是:1+1
使用命令:dir *.txt >1.txt
这时候 1.txt的内容就变成了 > 符号前命令的回显内容。
这个符号的作用于 > 有点类似,但它们的区别是 >> 是传递并在文件的末尾追加,而 > 是覆盖。
这是一个管道传输命令,意思是将上一个命令执行的结果传到下一个命令去处理
例如:
dir c:\|find "txt"
以上命令是查找c:\所有,并发现txt字符串
find的功能请用 find /? 自行查看
在不使用format的自动格式化参数时,我是这样来自动格式化A盘的:
echo y|format a: /s /q /v:system
用过format的都知道,在格盘时要输入y来确认是否格盘。这个命令前加上echo y,并用|字符将echo y的结果传给了format命令,从而达到自动输入y的目的。(这条命令有危害性,测试时须谨慎)
^ 是对特殊符号 \<、>、& 的前导字符。在命令中它将以上三个符号的特殊功能去掉,仅仅只把它们当成符号而不使用它们的特殊意义。
比如:
echo test ^>1.txt
这个符号允许在一行中使用两个以上不同的命令。当第一个命令执行失败了,也不影响后边的命令执行。
比如:
dir z:\ & dir y:\ & dir c:\
以上命令会连续显示z、y、c盘的内容,不理会该盘是否存在。
这个命令和上边的类似,区别是用这个&&的话,第一个命令失败时,后边的命令也不会执行。
dir z:\ && dir y:\ && dir c:\
双引号允许在字符串中包含空格,进入一个特殊目录可以用如下方法:
cd "program files"
cd progra~1
cd pro*
以上三种方法都可以进入program files这个目录。
逗号相当于空格,在某些情况下“,”可以用来当作空格使
比如:
dir,c:\
分号,当命令相同时,可以将不同目标用;来隔离。但执行效果不变。如执行过程中发生错误,则返回错误报告,程序也不会执行。例如:
dir c:\;d:\;e:\;f:\
以上命令相当于:
dir c:\
dir d:\
dir e:\
dir f:\
【文件夹管理】
cd命令来改变当前目录。进入子目录:cd 子目录名
;返回父目录:cd ..
;回到根目录:cd \
。\就表示根目录。
md命令用来创建目录。
tree | 显示命令树结构 | |
---|---|---|
适用场合 | 查看所有的子目录 | |
用法 | tree [盘符] |
显示所有的子目录树 |
tree /f |
显示每个文件夹中文件的名称 | |
tree /a |
使用ASCII字符,而不使用扩展字符 | |
例子 | c:\windows>tree /a |
在dos提示符下,如果我们要执行某个可执行文件,电脑会在磁盘上寻找这个文件。如果不经过特殊处理,它只在当前目录下寻找。如果没有找到就会提示出错。
为了解决这个问题,dos提供了一条path命令,如果在path命令中定义了某个目录,那么你在任何地方,都可以直接执行path中指定目录里的文件。
path命令格式简单,比如:path=c:\dos;c:\windows;c:\
这条命令就是说,当我们执行一个文件时,电脑先在当前目录下查找这个文件,找到则执行,如果没找到,则电脑按照path命令所指定的目录顺序去查找,先在c盘dos目录下,然后是windows目录下,最后在c盘根目录下寻找这个文件。
xcopy | 拷贝目录和文件 | |
---|---|---|
适用场合 | 在进行连同子目录一起拷贝时很有用,在拷贝大量文件时比copy命令要快得多 | |
用法 | xcopy [文件名] [目录] |
将指定文件拷贝到指定目录 |
xcopy [源目录] [目的目录] |
将源目录连子目录拷贝到目的目录下 | |
xcopy *.* [目录] /s |
将文件与非空子目录拷贝到指定目录 | |
其他常用参数还有: | v 拷贝后校验,会影响速度 | |
e 与s类似,但即使子目录是空的也会拷贝 |
【文件管理】
type命令的格式:type 文件名
。朱翊,除了扩展名是txt的文件,对其他文件使用type,有可能屏幕上会出现很多怪符号,还会嘀嘀乱叫。
例子:根目录下有一个文件叫做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 *.tmp
就是把所有扩展名是tmp的文件都删除。
删除当前目录中的所有文件,命令很简单:del *.*
或del .
。
del *.*
或del .
一般用于在删除子目录之前,先删除目录中的所有文件。
del命令还可以删除非当前目录中的文件,例如删除C盘temp目录内的所有文件,正确方法是输入del c:\temp\.
或del c:\temp\*.*
,然后再输入y表示确认。
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 源文件名 目的文件名
。
例如把abc.txt改成bne.dat,就可以输入ren abc.txt bne.dat
。
如果用ren命令更改非当前目录中的文件名,那么源文件名和目的文件名要在同一个目录内。
【网络命令】
ping命令的语法格式:
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-v-d-i-n-g[主机名]
其中:
- -v 显示远程服务器的所有响应信息
- -n 限制FTP的自动登录,即不使用
- -d 使用调试方式
- -g 取消全局文件名
一般写法:ftp -n -s:[[drive:][path]
上面的filename为ftp命令文件,包括登录IP地址,用户名、密码、操作命令等,例如:
open 90.52.8.3 #打开ip
user iware #用户为iware
password8848 #密码
bin #二进制传输模式
prompt
cd tmp1 #切换至iware用户下的tmp1目录
pwd
lcd d:\download #本地目录
mget * #下载tmp1目录下的所有文件
bye #退出ftp
(1) net share - 查看共享命令:
net share ipc$
- 设置ipc /del` - 删除ipc$共享 (xp系统无法删除)net share c$=c:
- 设置c盘为共享(2) net user - 查看本地的用户列表
net user 用户名 密码 /add
- 增加一个用户net user 用户名 /add
或 net user 用户名 "" /add
- 增加一个密码为空的用户net user 用户名 /del
- 删除某个用户名net user 用户名 /active:yes(no)
- 设置某个用户的状态为启用(禁用)(3) net localgroup administrators - 查看管理员组里的用户(即权限为管理员的用户)
net localgroup administrators 用户名 /add
- 把某个用户增加到管理员组里net localgroup administrators 用户名 /del
- 从管理员组里删除某个用户注意:1. 增加到某个组里的用户必须是已经被创建过的用户。 2.增加到的组必须为存在的组.
(4) net start - 查看已经启动的服务列表
net start 服务名
- 开启某个服务 注意:要想成功的开启一个服务,前提是它被停用了,而不是被禁止
(5) net stop 服务名
- 停止某个服务
注意:停止的服务必须是已经启动的,而不是已经停止或是被禁止的
telnet命令的一般形式为:telnet 主机名/IP
。其中“主机名/IP”是要连接的远程机的主机名或IP地址。
例: telnet 192.168.0.1
如果这一命令执行成功,将从远程机上得到login:提示符。
使用telnet命令登录的过程如下:$ telnet 主机名/IP 启动telnet会话。
一旦telnet成功地连接到远程系统上,就显示登录信息并提示用户输人用户名和口令。如果用户名和口令输入正确,就能成功登录并在远程系统上工作。在 telnet提示符后面可以输入很多命令,用来控制telnet会话过程,在telnet联机帮助手册中对这些命令有详细的说明。
语法:
ipconfig [/all] [/renew [Adapter]] [/release [Adapter]] [/flushdns] [/displaydns] [/registerdns] [/showclassid Adapter] [/setclassid Adapter [ClassID]]
参数: