导图社区 DOS基本命令操作
DOS基本命令操作知识分享!内容覆盖常用内部命令、文件操作命令、网络相关命令、需要下载程序的外部命令、批处理命令、批处理常用标记符号等等,可用于bat文件。
编辑于2023-02-17 09:28:48 重庆DOS基本命令操作
DOS基本简介
dos命令分为内部命令和外部命令:
内部命令是随每次启动的 command.com装入并常驻内存,而外部命令是一条单独的可执行文件。在操作时要记住的是,内部命令在任何时候都可以使用。
外部命令需要保证命令文件在当前的目录中,或在Autoexec.bat文件被加载了路径。
区分外部命令和内部命令
外部命令
简单的说,外部命令是指DOS在特定目录下调用的应用程序,一般是.exe或.com为扩展名,这些命令删除后就不能再用了。常用的有:format.fdisk.wget等等。
内部命令
内部命令是指集成在DOS系统中的指令,用DIR列表是看不见的,是无法删除的!在任何目录下都可以运行执行的命令。常用的有:dir.rd.cd.md等等。
具体讲:内部命令以外的其他dos可执行程序都可以称为外部命令。
内部命令
常用内部命令
cls
清理屏幕上所有显示的内容,光标置于屏幕左上角
cd
cd \
返回根目录
cd .
当前目录
cd ..
返回上一层目录
dir
dir/a
当前目录所有文件(包括隐含及系统文件)
dir/ah
隐含文件(包含子目录(隐含的) dir /a-h
dir/as
列系统文件 dir /a-s
dir/ad
列子目录 dir /a-d
dir/o
按字母顺序
dir/b
只显示文件名与扩展名
dir/p
/p 如果数据太多分页显示,页间暂停
echo
打印文本信息到屏幕下
使用help 查看帮助
命令 -help 或者 命令 --命令
命令 /?
">" 及 ">>"
echo “添加内容到one.txt” > D:\one.txt
创建文件内容(或者覆盖内容)到one.txt中
echo “追加内容到one” >> D:\one.txt
追加内容到文件one.txt中
"<" 及 "<<"
cmd < one.bat
将one.bat文件内容作为cmd命令运行
cmd << two.txt
文件作为cmd命令的输入参数追加进去
常用命令
date
date[mm-dd-yy]
显示或设置系统日期 。 (直接输入date显示当前时间)
time
time[hh:mm:ss:xx]
显示或设置系统时期。(直接输入time显示当前时间)
prompt
prompt\路径名$g
更改dos系统提示符风格。(可以prompt /? 查看详情)
想要退出输入prompt即可
tree
tree\路径名\文件名
显示目录树命令
tree /f \路径名\文件名
显示每个文件夹中的文件名称
shutdown
shutdown命令,允许通过本地或远程方式正确关闭计算机
shutdown /? 查看详情
shutdown /i
远程关机对话框
shutdown /s
关闭计算机命令
shutdown /a
终止计算机关闭命令
shutdown /r
完全关闭并重新启动计算机
shutdown /p
关闭本地计算机,没有超时或者警告
shutdown /h
休眠本地计算机
shutdown /t
将关闭前的超时时间设置为 xxx 秒。 有效范围是 0-315360000 (10 年),默认值为 30。 如果超时时间大于 0,则默示为 /f 参数。
shutdown /f
强制关闭正在运行的应用程序而不事先警告用户。 如果为 /t 参数指定大于 0 的值, 则默示为 /f 参数。
shutdown /l
注销当前用户,使计算机到登录界面
shutdown /s /t 60
60秒后关闭计算机
shutdown /r /t 60
60秒后重启计算机
color
color a 设置一个为前景色.
color /? 查看详情
颜色值 设置cmd控制台前景和背景颜色
color 0a 设置两个值(表示第一个为背景色,第二个值为前景色)
颜色值 设置cmd控制台前景和背景颜色
较为常用
文件操作命令
md
md\路径名\文件夹名
创建文件夹
cd > 目录名\one.txt
cd >目录名\文件名
创建指定文件
echo
echo 文件中的内容>one.txt
新建非空文件
type
type nul>one.txt
创建一个空文件
type one.txt
可以查看此文件内容
创建文件
rd
rd\路径名\文件名
删除指定文件夹,文件夹内不能有子文件
rd\路径名\文件名/s
用于删除目录树。处目录本身外,还将删除指定目录下的所有子目录
del
del\路径名\文件名
删除指定文件。
del /p \路径名\文件名
/p 删除文件前要询问
del\路径名\*.txt 或者*.docx
删除指定后缀的文件
解释
使用del命令需要单独的一行来操作
deltree
删除子目录及文件,尽管有些文件是系统或隐含的.(这事外部命令,如果需要使用需要下载deltree.exe) (等同于rd命令)
deltree L*.* 将删除以上所有为L开头的文件和子目录,但在删除前加以确认,若不删除,
deltree L*.* /y
/y 参数是在删除时不加以确认就进行操作的.
删除文件
copy
copy\源盘\路径名\ 目标盘\路径名\目标文件名
将一个或多个文件拷贝到指定磁盘中,文件复制命令
move
move\源盘\路径名\ 目标盘\路径名\目标文件名
move和copy的区别:move命令会将文件从源位置删除,并移动到目标位置,文件移动命令
type
type\路径名\文件名
显示文件内容(ASCII编码)
path
path path=c:\路径名\文件名
搜索设备可执行文件路径,仅对文件有效。
ren
ren\路径名\旧文件名 新文件名(REN [drive:][path]filename1 filename2.)
修改某文件的文件名。
文件基本操作
网络相关命令
ipconfig
显示windows ip 详细地址
ipconfig /? 可以查看详情
ping
ping baidu.com
ip(或域名)“
向对方主机发送默认大小为32字节的数据
ping -n 5 网址
-n发送数据次数”;
ping -t 网址
“-t”指一直ping;
ping -l 50 网址
-l[空格]数据包大小”;
netstat
netstat -a
查看开启了哪些端口,常用netstat -an
netstat -n
查看端口的网络连接情况,常用netstat -an
netstat -v
查看正在进行的工作
netstat -p
协议名 例:netstat -p tcq/ip 查看某协议使用情况(查看tcp/ip协议使用情况)
netstat -s
查看正在使用的所有协议使用情况
cmd快捷键
ESC
清楚当前命令行
ctrl + C
结束进程命令
F1键
按单字依次输入上一条命令
F2键
可以复制的字符数;输入最后一条命令中的字符后,系统会自动删除该字符后的内容
F3键
重新输入上次输入的命令,同样的功能也适用于箭头键
F4键
字符数可以删除,和F2的功能一样
F5键
相当于键盘上↑的作用
F6键
相当于在键盘上按Ctrl+Z键
F7键
查看执行过的命令
F8键
搜索命令的历史,循环显示所有输入的命令,直到按下回车键
F9键
按编号选择命令,需要手动输入
外部命令
需要下载程序的外部命令
外部命令所下载的包或者程序(.exe),需要解压到 C:\Windows\System32 目录
wget.exe 文件下载程序
需要下载wget.exe。 (wget命令用从指定的URL下载文件)
启动参数
-V, --version 显示 Wget 的版本信息并退出 -h, --help 打印此帮助 -b, --background 启动后转入后台 -e, --execute=命令 运行一个“.wgetrc”风格的命令```
记录和输入文件选项
-o, --output-file=文件 将日志信息写入 FILE -a, --append-output=文件 将信息添加至 FILE -d, --debug 打印大量调试信息 -q, --quiet 安静模式 (无信息输出) -v, --verbose 详尽的输出 (此为默认值) -nv, --no-verbose 关闭详尽输出,但不进入安静模式 --report-speed=类型 以 <类型> 报告带宽。类型可以是 bits -i, --input-file=文件 下载本地或外部 <文件> 中的 URL -F, --force-html 把输入文件当成 HTML 文件 -B, --base=URL 解析相对于 URL 的 HTML 输入文件链接 (-i -F) --config=文件 指定要使用的配置文件 --no-cookies 不读取任何配置文件 --rejected-log=文件 将拒绝 URL 的原因写入 <文件>。
下载选项
参数
-t, --tries=数字 设置重试次数为 <数字> (0 代表无限制) --retry-connrefused 即使拒绝连接也是重试 -O, --output-document=文件 将文档写入 FILE -nc, --no-clobber 文件存在时,下载文件不覆盖原有文件 -c, --continue 断点续传下载文件 --start-pos=偏移量 从由零计数的 <偏移量> 开始下载 --progress=类型 选择进度条类型 --show-progress 在任意啰嗦状态下都显示进度条 -N, --timestamping 只获取比本地文件新的文件 --no-if-modified-since 不要在时间戳 (timestamping) 模式下使用 if-modified-since get 条件请求 --no-use-server-timestamps don't set the local file's timestamp by the one on the server -S, --server-response 打印服务器响应 --spider 不下载任何文件 -T, --timeout=SECONDS 将所有超时设为 SECONDS 秒 --dns-timeout=SECS 设置 DNS 查寻超时为 SECS 秒 --connect-timeout=SECS 设置连接超时为 SECS 秒 --read-timeout=SECS 设置读取超时为 SECS 秒 -w, --wait=SECONDS 等待间隔为 SECONDS 秒 --waitretry=SECONDS 在获取文件的重试期间等待 1..SECONDS 秒 --random-wait 获取多个文件时,每次随机等待间隔 (0.5~1.5)*WAIT 秒 --no-proxy 禁止使用代理 -Q, --quota=数字 设置获取配额为 <数字> 字节 --bind-address=ADDRESS 绑定至本地主机上的 ADDRESS (主机名或是 IP) --limit-rate=RATE 限制下载速率为 RATE --no-dns-cache 关闭 DNS 查询缓存 --restrict-file-names=系统 限定文件名中的字符为 <系统> 允许的字符 --ignore-case 匹配文件/目录时忽略大小写 -4, --inet4-only 仅连接至 IPv4 地址 -6, --inet6-only 仅连接至 IPv6 地址 --prefer-family=地址族 首先连接至指定家族(IPv6,IPv4 或 none)的地址 --user=用户 将 ftp 和 http 的用户名均设置为 <用户> --password=密码 将 ftp 和 http 的密码均设置为 <密码> --ask-password 提示输入密码 --no-iri 关闭 IRI 支持 --local-encoding=ENC 使用 ENC 作为 IRI (国际化资源标识符) 的本地编码 --remote-encoding=ENC 使用 ENC 作为默认远程编码 --unlink 覆盖前移除文件
目录选项
-nd, --no-directories 不创建目录 -x, --force-directories 强制创建目录 -nH, --no-host-directories 不要创建主 (host) 目录 --protocol-directories 在目录中使用协议名称 -P, --directory-prefix=前缀 保存文件到 <前缀>/.. --cut-dirs=数字 忽略远程目录中 <数字> 个目录层。
HTTP选项
--http-user=用户 设置 http 用户名为 <用户> --http-password=密码 设置 http 密码为 <密码> --no-cache 不使用服务器缓存的数据。 --default-page=NAME 改变默认页 (通常是“index.html”)。 -E, --adjust-extension 以合适的扩展名保存 HTML/CSS 文档 --ignore-length 忽略头部的‘Content-Length’区域 --header=字符串 在头部插入 <字符串> --max-redirect 每页所允许的最大重定向 --proxy-user=用户 使用 <用户> 作为代理用户名 --proxy-password=密码 使用 <密码> 作为代理密码 --referer=URL 在 HTTP 请求头包含‘Referer: URL’ --save-headers 将 HTTP 头保存至文件。 -U, --user-agent=代理 标识自己为 <代理> 而不是 Wget/VERSION。 --no-http-keep-alive 禁用 HTTP keep-alive (持久连接)。 --no-cookies 不使用 cookies。 --load-cookies=文件 会话开始前从 <文件> 中载入 cookies。 --save-cookies=文件 会话结束后保存 cookies 至 FILE。 --keep-session-cookies 载入并保存会话 (非永久) cookies。 --post-data=字符串 使用 POST 方式;把 <字串>作为数据发送。 --post-file=文件 使用 POST 方式;发送 <文件> 内容。 --method=HTTP方法 在请求中使用指定的 <HTTP 方法>。 --post-data=字符串 把 <字串> 作为数据发送,必须设置 --method --post-file=文件 发送 <文件> 内容,必须设置 --method --content-disposition 当选择本地文件名时允许 Content-Disposition 头部 (实验中)。 --content-on-error 在服务器错误时输出接收到的内容 --auth-no-challenge 不先等待服务器询问就发送基本 HTTP 验证信息。
HTTPS (SSL/TLS) 选项
--secure-protocol=PR 选择安全协议,可以是 auto、SSLv2、 SSLv3、TLSv1、PFS 中的一个。 --https-only 只跟随安全的 HTTPS 链接 --no-check-certificate 不要验证服务器的证书。 --certificate=文件 客户端证书文件。 --certificate-type=类型 客户端证书类型,PEM 或 DER。 --private-key=文件 私钥文件。 --private-key-type=类型 私钥文件类型,PEM 或 DER。 --ca-certificate=文件 带有一组 CA 证书的文件。 --ca-directory=DIR 保存 CA 证书的哈希列表的目录。 --ca-certificate=文件 带有一组 CA 证书的文件。 --pinnedpubkey=FILE/HASHES Public key (PEM/DER) file, or any number of base64 encoded sha256 hashes preceded by 'sha256//' and seperated by ';', to verify peer against
HSTS 选项
--no-hsts 禁用 HSTS --hsts-file HSTS 数据库路径(将覆盖默认值)
FTP 选项
--ftp-user=用户 设置 ftp 用户名为 <用户>。 --ftp-password=密码 设置 ftp 密码为 <密码> --no-remove-listing 不要删除‘.listing’文件 --no-glob 不在 FTP 文件名中使用通配符展开 --no-passive-ftp 禁用“passive”传输模式 --preserve-permissions 保留远程文件的权限 --retr-symlinks 递归目录时,获取链接的文件 (而非目录)
FTPS 选项
--ftps-implicit 使用隐式 FTPS(默认端口 990) --ftps-resume-ssl 打开数据连接时继续控制连接中的 SSL/TLS 会话 --ftps-clear-data-connection 只加密控制信道;数据传输使用明文 --ftps-fallback-to-ftp 回落到 FTP,如果目标服务器不支持 FTPS
WARC 选项
--warc-file=文件名 在一个 .warc.gz 文件里保持请求/响应数据 --warc-header=字符串 在头部插入 <字符串> --warc-max-size=数字 将 WARC 的最大尺寸设置为 <数字> --warc-cdx 写入 CDX 索引文件 --warc-dedup=文件名 不要记录列在此 CDX 文件内的记录 --no-warc-compression 不要 GZIP 压缩 WARC 文件 --no-warc-digests 不要计算 SHA1 摘要 --no-warc-keep-log 不要在 WARC 记录中存储日志文件 --warc-tempdir=目录 WARC 写入器的临时文件目录
递归下载
-r, --recursive 指定递归下载 -l, --level=数字 最大递归深度 (inf 或 0 代表无限制,即全部下载)。 --delete-after 下载完成后删除本地文件 -k, --convert-links 让下载得到的 HTML 或 CSS 中的链接指向本地文件 --convert-file-only convert the file part of the URLs only (usually known as the basename) --backups=N 写入文件 X 前,轮换移动最多 N 个备份文件 -K, --backup-converted 在转换文件 X 前先将它备份为 X.orig。 -m, --mirror -N -r -l inf --no-remove-listing 的缩写形式。 -p, --page-requisites 下载所有用于显示 HTML 页面的图片之类的元素。 --strict-comments 用严格方式 (SGML) 处理 HTML 注释。
递归接受/拒绝
-A, --accept=列表 逗号分隔的可接受的扩展名列表 -R, --reject=列表 逗号分隔的要拒绝的扩展名列表 --accept-regex=REGEX 匹配接受的 URL 的正则表达式 --reject-regex=REGEX 匹配拒绝的 URL 的正则表达式 --regex-type=类型 正则类型 (posix|pcre) -D, --domains=列表 逗号分隔的可接受的域名列表 --exclude-domains=列表 逗号分隔的要拒绝的域名列表 --follow-ftp 跟踪 HTML 文档中的 FTP 链接 --follow-tags=列表 逗号分隔的跟踪的 HTML 标识列表 --ignore-tags=列表 逗号分隔的忽略的 HTML 标识列表 -H, --span-hosts 递归时转向外部主机 -L, --relative 仅跟踪相对链接 -I, --include-directories=列表 允许目录的列表 --trust-server-names 使用重定向 URL 的最后一段作为本地文件名 -X, --exclude-directories=列表 排除目录的列表 -np, --no-parent 不追溯至父目录
常用语法命令
wget [options] [url]
默认下载到当前目录
wget -O wordpress.zip http://test.com/download
保存为指定的名字(添加到指定的压缩包里面去)
wget --limit-rate 300k http://www.linuxde.net/testfile.zip
限制下载速度
wget -c http://www.linuxde.net/testfile.zip
断点续传
wget -b http://www.linuxde.net/testfile.zip
后台运行下载 . 对于下载非常大的文件的时候,我们可以使用参数-b进行后台下载
wget -i filelist.txt ->从filelist.txt获取下载地址
从指定文件获得下载地址(文本文件里面保存下载url),一般用于下载多个文件。
wget -nc http://www.linuxde.net/testfile.zip
文件存在时,下载文件不覆盖原有文件;
wget -p /thinkphp http://www.linuxde.net/testfile.zip
将文件下载到指定目录
wget –user-agent=”Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16″ 下载链接
伪装代理名称下载
有些网站能通过根据判断代理名称不是浏览器而拒绝你的下载请求。 不过你可以通过–user-agent参数伪装。
wget –-spider http://www.linuxde.net/testfile.zip
使用wget –spider测试下载链接(测试此链接是否有效)
wget –tries=40 http://www.linuxde.net/testfile.zip
如果网络有问题或下载一个大文件也有可能失败。wget默认重试20次连接下载文件。如果需要,你可以使用–tries增加重试次数。
wget -o download.log http://www.linuxde.net/testfile.zip
使用wget -o把下载信息存入日志文件 你不希望下载信息直接显示在终端而是在一个日志文件.
nc.exe 瑞士军刀
NetCat,简称’nc’,有着 网络安全界"瑞士军刀" 的美称,可以通过TCP/UDP协议读写,是一个好用稳定的连接系统后门的工具,同时也是一个网络调试和开发工具。
子主题
xscan.exe 扫描工具程序
子主题
tscrack.exe 终端服务密码破解程序
子主题
edit.exe 编辑文件程序
edit\路径名\文件名
编辑文件内容(ASCII编码),也可以建立一个文件,可编辑.bat或.bas的格式
需要下载edit.exe
windows不常用的自带程序
ver
ver
显示当前系统的版本号
msconfig
系统配置
notepad + 路径
打开记事本
dxdiag
检查DirectX信息
wmimgmt.msc
打开windows管理体系结构(WMI)
wscript
windows脚本宿主设置
write
写字板
wiaacmgr
扫描仪和相机
calc
计算器
mspaint
画板图
mstsc
远程桌面连接
mmc
打开控制台
devmgmt.msc
设备管理器
sndrec32
录音机
sndovl32
音量控制器
taskmgr
任务管理器
explorer
资源管理器
regedit.exe
注册表
eventvwr
事件查看器
lusrmgr
用户组
net user
查看账户名
utilman
辅助工具管理器
gpedit.msc
本地策略组
批处理命令
批处理程序可以做什么
使用一系列内置命令进行自动化操作
新建文件,日志,修改系统环境变量等
甚至可以创建计算机病毒
批处理命令
批处理文件或批处理程序是一个包含若干MS-DOS命令的正文文件,扩展名为.BAT。当在命令提示符下敲入批处理程序的名称时,MS-DOS成组执行此批处理程序中的命令。
任何在命令提示符下可使用的命令都可用在批处理程序中。此外,下面MS-DOS命令是专门在批处理程序中使用的。其中 if goto choice for是批处理文件中比较高级的命令,掌握了就能够更好的编写批处理。
<Call>
call
调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。
语法格式
call [drive:][path]filename [batch-parameters]
[drive:][path]filename 指定要调用的批处理程序的名字及其存放处。文件名必须用.BAT作扩展名。
batch-parameters 指定批处理程序所需的命令行信息。 (这里也可以传递值给被调用的bat文件。PS: 传递多个常量参数时,用逗号隔开数据,若不用逗号则以空格为准;若传递为参数时,不必加逗号或者空格区分)
案例:
call ones_text.bat 你好,世界!
调用外部bat文件,并且传递了两个参数,传递参数需要用逗号隔开。
被调用文件 ones_text.bat
echo %1,%2
此处能接收到 你好,世界! 这两个值
这里所接收的参数 (如 %1 %2 %3 %4 %5 ...) ,传递参数一次性最多只能传递十个,%0-%9。%0代表自己,%1之后代表所传递的参数
<Echo>
当程序运行时,显示或隐藏批处理程序中的正文。也可用于允许或禁止命令的回显。
语法格式
ECHO [ON | OFF]
echo on|off
有两个参数选择,指定是否允许命令的回显。若要显示当前的ECHO的设置,可使用不带参数的ECHO命令。
echo on
这里是开启回显命令
echo off
表示在此语句后所有运行的命令都不显示命令本身,只显示运行结果
ECHO [message]
echo 12456
打印当前数据到cmd命令行
@与echo off很像
它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。
<Choice>
choice 使用此命令可以让用户输入一个字符(用于选择),从而根据用户的选择返回不同的errorlevel,然后于if errorlevel配合,根据用户的选择运行不同的命令。
choice 语法格式
描述
该工具允许用户从选择列表选择一个项目并返回所选项目的索引
CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]
参数列表
参数列表: /C choices 指定要创建的选项列表。默认列表是 "YN"。 /N 在提示符中隐藏选项列表。提示前面的消息得到显示, 选项依旧处于启用状态。 /CS 允许选择分大小写的选项。在默认情况下,这个工具 是不分大小写的。 /T timeout 做出默认选择之前,暂停的秒数。可接受的值是从 0 到 9999。如果指定了 0,就不会有暂停,默认选项 会得到选择。 /D choice 在 nnnn 秒之后指定默认选项。字符必须在用 /C 选 项指定的一组选择中; 同时,必须用 /T 指定 nnnn。 /M text 指定提示之前要显示的消息。如果没有指定,工具只 显示提示。 /? 显示帮助消息。 注意: ERRORLEVEL 环境变量被设置为从选择集选择的键索引。列出的第一个选 择返回 1,第二个选择返回 2,等等。如果用户按的键不是有效的选择, 该工具会发出警告响声。如果该工具检测到错误状态,它会返回 255 的 ERRORLEVEL 值。如果用户按 Ctrl+Break 或 Ctrl+C 键,该工具会返回 0 的 ERRORLEVEL 值。在一个批程序中使用 ERRORLEVEL 参数时,将参数降 序排列。
重点
命令格式中“[]”,方括号的意思是可以省略
此命令的返回值蕴藏在ERRORLEVEL中,需要使用IF ERRORLEVEL函数判断返回的值
choice 案例:
::echo 是否确认关机!!! choice /c ync /n /cs /t 4 /d n /m "确认选择y,否则选择n,取消选择c" ::if defined errorlevel (echo errorlevel) else (echo 没有参数!) ::if %errorlevel% == 1 goto aa ::if %errorlevel% == 2 goto bb ::if %errorlevel% == 3 goto cc if errorlevel == 3 goto cc if errorlevel == 2 goto bb if errorlevel == 1 goto aa :aa echo 30秒后即将关机! pause & exit :bb echo 你取消了关机指令! pause & exit :cc echo 拜拜! pause & exit
(注意,用if errorlevel判断返回值时,要按返回值从高到低排列):
使用 if %errorlevel% 也能获取值
<For>
for 循环命令,只要条件符合,他将多次执行同一命令
for 循环
基本语法
FOR %variable IN (set) DO command [command-parameters]
for参数:/D /R /L /F
解释
%variable 指定一个单一字母可替换的参数。
(set) 指定一个或一组文件。可以使用通配符。
command 指定对每个文件执行的命令。
command-parameters为特定命令指定参数或命令行开关。
语法详情
基本用法
for %%i in (A,B,C) do echo %%i
循环输出A,B,C
for %%a in (C:\Users\Administrator\Desktop\thinkphp\o*.* ) do echo %%a
循环显示指定目录下以O开头的文件
参数D
格式:FOR /D %variable IN (set) DO command [command-parameters] 这个参数只会搜索指定目录下的,不会搜索再下一级目录. 可以带着通配符查询
for /d %%m in (C:\Users\Administrator\Desktop\thinkphp\*) do echo %%m
参数 /d 这里会打印出此路径下所有目录
for /d %%m in (..\???) do echo %%m
这里搜索上一级1-3字母的目录
参数R
格式:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters] 参数 /R (搜索指定路径及所有子目录中与set相符合的所有文件)
for /r C:\Users\Administrator\Desktop\thinkphp %%s in (*.bat) do echo %%s
1、set中的文件名如果含有通配符(?或*),则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。
for /r C:\Users\Administrator\Desktop\thinkphp %%s in (testinfo.bat) do echo %%s
2、如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录)(并在后面加上具体的文件名),而不管set中的指定文件是否存在。
参数L
格式:FOR /L %variable IN (start,step,end) DO command [command-parameters] 参数 /L (该集表示以增量形式从开始到结束的一个数字序列。可以使用负的 Step)
for /l %%t in (1,1,5) do echo %%t
打印出1至5的数字 第一个1为开始,第二个1为每次要加的数(或者减的数),第三个5为截至的数字
for /l %%t in (10,-2,1) do echo %%t
也可以为负数
参数F
参数 /F (使用文件解析来处理命令输出、字符串及文件内容。) 这个参数是最难的,参数又多,先简单的解释一下: 1.for命令带这个参数可以分析文件内容 2.字符串内容 3.某一命令输出的结果 并通过设置option得到我们想要的结果。
基本语法
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
解释
file-set 文件内容
string 字符串内容
command 命令输出的结果
options 自定义参数值
或者,如果有 usebackq 选项:
FOR /F ["options"] %variable IN ("file-set") DO command [command-parameters]
FOR /F ["options"] %variable IN ('string') DO command [command-parameters]
FOR /F ["options"] %variable IN (`command`) DO command [command-parameters]
--(`command`中的引号为反引号,是键盘上数字1左面的那个键)
OPTION关键字详解:
eol=c:指一个行注释字符的结尾(就一个)。例如:eol=; --忽略以分号打头的那些行;
skip=n:指在文件开始时忽略的行数。例如:skip=2 --忽略2行;
delims=xxx:指分隔符集。"表示定义顿号“、”为分隔符,并用该分隔符“、”切分文本字符串。除了顿号“、”,还有减号“-”和点号“.”或者空格“ ”(这个参数空格作为默认分隔符),空格一般放在最后 。分隔符一般为文件内的标点符号或者字符,可以定义一个分隔符,也可以定义多个分隔符。
tokens=x,y,m-n:指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符是星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。例如:tokens=2,3* --将每行中的第二个和第三个符号传递给 for 程序体;tokens=2,3* ... %%i --将会把取到的第二个字符串赋给%%i,第三个赋给%%j,剩下的赋给%%k。
单独解释->
tokens= 1,2。 这个参数可以定义很多个,需要delims=分割参数来决定的。如果将文本内容分割的越多,那么需要选择的列就有很多。所以tokens选择的列也就增多。 对应列打印输出的隐性变量为 %%i %%j %%k %%l 依次类推。 tokens = 1,2* 如果符号字符串中的最后一个字符是星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。
for /f 案例
分析文件内容
for /f "eol=: skip=3 delims=_ " %%i in (one_text.bat) do echo %%i
for /f "eol=: skip=3 delims=_, " %%i in (one_text.bat) do echo %%i
eol=: 忽略以冒号开头的行。skip=3 忽略前面三行。 delims=_, 以下划线逗号空格分割字符。文件中每行字匹配到的分隔符,将他们分成两部分。默认只显示前半部分,后半部分和分隔符不显示。(根据delims参数指定的分隔符进行匹配截取)
delimes参数 和 tokens参数 联合使用
for /f "eol=: tokens=1,2* delims=、-." %%i in (gequ.txt) do echo %%i %%j %%k
tokens参数带有星号,第一列和第二列用分隔符分割出来,后面的内容将以原始内容保留
for /f "eol=: tokens=1,2,3,4 delims=、-." %%i in (gequ.txt) do echo %%i %%j %%k %%l
使用delims参数将文件内容分割成几份,tokens参数选择要输出的列,%%i %%j %%k %%l 是隐性输出变量
小结
delimes参数
第一、指定原文中的标点符号作为分隔符。使得文本被划分为许多小部分,方便使用批处理命令读取和编辑。
第二、读取第一个分隔符之前的内容。忽略第一个分隔符和分隔符后面的内容,如需读取和编辑,需要使用tokens等命令。
"delims=" 这是取消默认空格为分隔符
tokens 参数
tokens:tokens负责提取字符串。具体用法见实例。
delims=和tokens=星号 的差别
"delims=" 的含义是取消默认的分隔符,所以会把行上的内容照搬下来,而 "tokens=*" 表示获取行上的所有内容,但是会忽略行首的所有空格。
分析字符串
for /f "tokens=1,2,3* delims=-, " %%i in ("aa bb,cc-dd ee") do echo %%i %%j %%k %%l
分析某一命令输出的句子
FOR /F "usebackq tokens=1* delims==" %%i IN (`set`) DO @echo [%%i----%%j]
打印出set包含的变量,用=号分割
<If>
if 是条件语句,用来判断是否符合规定的条件,从而决定执行不同的命令。有三种格式
if & if not
这两种语法都有三种句式
IF [NOT] ERRORLEVEL number do command
IF [NOT] string1==string2 do command
IF [NOT] EXIST filename do command
解释
NOT 指定只有条件为 false 的情况下,Windows 才应该执行该命令。
ERRORLEVEL number 如果最后运行的程序返回一个等于或者大于指定数字的退出代码,指定条件为true
string1 == string2 如果指定的文字字符串匹配,指定条件为true
EXIST filename 如果指定的文件名存在,指定条件为true
command 如果符合条件,指定要执行的命令。如果指定的条件为 FALSE,命令后可跟 ELSE 命令,该命令将 在 ELSE 关键字之后执行该命令。
ELSE 命令必须与 IF 命令的尾端在同一行上。例如
IF EXIST filename. ( echo 文件存在. ) ELSE (
if语句案例
if "%1" == "infos" echo 输出正确数值:“%1”
如果传入参数等于infos那么输出值
if not "%1" == "infos" echo 传入值出现错误
如果传入值不等于infos,打印错误
普通判断语句
if exist one_text.bat call one_text.bat 你好,世界!
如果存在one_text.bat文件那就调用此文件,并且传递参数
if not exist ones_text.bat echo 文件不存在!
如果ones_text.bat文件不存在,那么输出提示信息
if exist ones_text.bat (del ones_text.bat ) ELSE (echo ones_text.bat.文件不存在.)
if else 判断条件
判断文件是否存在if语句
if errorlevel 0 (echo "2") else (echo "1")
解释:DOS程序运行时都会返回一个数字给DOS,称为错误码errorlevel或称返回码,常见的返回码为0、1。
如果返回码为0 输出2 否则输出1(也可以使用in not errorlevel)
DOS命令返回码判断
if扩展
如果命令扩展被启用 IF会有如下改变
IF [/I] string1 compare-op string2 command
IF CMDEXTVERSION number command
IF DEFINED variable command
解释
if /i 判断字符时不区分字符的大小写
compare-op 就是比较运算符 EQU、NEQ等
CMDEXTVERSION CMDEXTVERSION 条件的作用跟 ERRORLEVEL 的一样,除了它是在跟与命令扩展有关联的内部版本号比较。第一个版本是 1。每次对命令扩展有相当大的增强时,版本号会增加一个。命令扩展被停用时,CMDEXTVERSION 条件不是真的。
DEFINED 可以判断已被定义的环境变量,如果被赋值那么就返回true
比较运算符
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
案例
set /a num1 = 2 + 1 set /a num2 = 2 + 1 if "%num1%" GTR "%num2%" (echo "%num1%" 大于 "%num2%" ) else if "%num1%" LSS "%num2%" (echo "%num1%" 小于 "%num2%" ) else if "%num1%" EQU "%num2%" (echo "数值相等")
判断变量是否被赋值
defined 属于if命令的一个参数(控制类),用于判定变量是否已经赋值
案例
set num1 = 2+2 if defined num1 (echo 变量已经被赋值!) else (echo 变量未被赋值!)
判断num1变量是否被赋值
讲解 errorlevel 与%errorlevel%的区别
他们都是判断上条命令的返回值
当使用 if errorlevel 值 command 句式时,它的含义是:如果返回的错误码值大于或等于值 的时候,将执行command操作; 当使用 if %errorleve%l 值 command 句式时,它的含义是:如果返回的错误码值等于值 的时候,将执行command操作; IF ERRORLEVEL 是用来获取它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值是依照从大到小次序顺序判断。 一般上一条命令的执行结果返回的值只有两个,"成功"用0 表示 "失败"用 1 表示,实际上,errorlevel 返回值可以在0~255 之间,
返回值较多的案例: (返回值较多的命令还有很多)
常用命令返回值及其代表的意义见注释: 举例:运行 xcopy 之后的返回值 0 成功拷贝文件 1 未找到拷贝文件 2 用户通过ctrl-c中止拷贝操作 4 预置错误阻止文件拷贝操作 (初始化错误) 5 拷贝过程中写盘错误
以下就是几个常用命令的返回值及其代表的意义: backup 0 备份成功 1 未找到备份文件 2 文件共享冲突阻止备份完成 3 用户用ctrl-c中止备份 4 由于致命的错误使备份操作中止 diskcomp 0 盘比较相同 1 盘比较不同 2 用户通过ctrl-c中止比较操作 3 由于致命的错误使比较操作中止 4 预置错误中止比较 diskcopy 0 盘拷贝操作成功 1 非致命盘读/写错 2 用户通过ctrl-c结束拷贝操作 3 因致命的处理错误使盘拷贝中止 4 预置错误阻止拷贝操作 format 0 格式化成功 3 用户通过ctrl-c中止格式化处理 4 因致命的处理错误使格式化中止 5 在提示“proceed with format(y/n)?”下用户键入n结束 xcopy 0 成功拷贝文件 1 未找到拷贝文件 2 用户通过ctrl-c中止拷贝操作 4 预置错误阻止文件拷贝操作 5 拷贝过程中写盘错误 ==== willsort 编注 ===================================================== chkdsk 0 未找到错误 255 找到一个或多个错误 choice 0 用户按下ctrl+c/break 1 用户按下第一个键 255 检测到命令行中的错误条件 其它 用户按下的有效字符在列表中的位置 defrag 0 碎片压缩成功 1 出现内部错误 2 磁盘上没有空簇。要运行DEFRAG,至少要有一个空簇 3 用户用Ctrl+C退出了DEFRAG 4 出现一般性错误 5 DEFRAG在读簇时遇到错误 6 DEFRAG在写簇时遇到错误 7 分配空间有错 8 内存错 9 没有足够空间来压缩磁盘碎片 deltree 0 成功地删除一个目录 diskcomp 0 两盘相同 1 发现不同 2 按CTRL+C 终止了比较 3 出现严重错误 4 出现初始化错误 find 0 查找成功且至少找到了一个匹配的字符串 1 查找成功但没找到匹配的字符串 2 查找中出现了错误 keyb 0 键盘定义文件装入成功 1 使用了非法的键盘代码,字符集或语法 2 键盘定义文件坏或未找到 4 键盘、监视器通讯时出错 5 要求的字符集未准备好 move 0 成功地移动了指定的文件 1 发生了错误 msav /N 86 检查到了病毒 replace 0 REPLACE成功地替换或加入了文件 1 MS-DOS版本和REPLACE不兼容 2 REPLACE找不到源文件 3 REPLACE找不到源路径或目标路径 5 不能存取要替换的文件 8 内存不够无法执行REPLACE 11 命令行句法错误 restore 0 RESTORE成功地恢复了文件 1 RESTORE找不到要恢复的文件 3 用户按CTRL+C终止恢复过程 4 RESTORE因错误而终止 scandisk 0 ScanDisk在它检查的驱动器上未检测到任何错误 1 由于命令行的语法不对,不能运行ScanDisk 2 由于内存用尽或发生内部错误,ScanDisk意外终止 3 用户让ScanDisk中途退出 4 进行盘面扫描时,用户决定提前退出 254 ScanDisk找到磁盘故障并已全部校正 255 ScanDisk找到磁盘故障,但未能全部校正 setver 0 SETVER成功地完成了任务 1 用户指定了一个无效的命令开关 2 用户指定了一个非法的文件名 3 没有足够的系统内存来运行命令 4 用户指定了一个非法的版本号格式 5 SETVER在版本表中未找到指定的项 6 SETVER未找到SETVER.EXE文件 7 用户指定了一个非法的驱动器 8 用户指定了太多的命令行参数 9 SETVER检测到丢失了命令行参数 10 在读SETVER.EXE文件时,SETVER检测到发生错误 11 SETVER.EXE文件损坏 12 指定的SETVER.EXE文件不支持版本表 13 版本表中没有足够的空间存放新的项 14 在写SETVER.EXE文件时SETVER检测到发生错误
if %ERRORLEVEL%对数值的比较方法不仅仅限于等于,可以使用参数来控制。 比如: IF %ERRORLEVEL% LEQ 1 goto aa 全部的比较参数如下: EQU - 等于、NEQ - 不等于、LSS - 小于、LEQ - 小于或等于、GTR - 大于、GEQ - 大于或等于
讲解 errorlevel 与%errorlevel%的区别
<Goto>
goto 批处理文件运行到这里将跳到goto所指定的标号(标号即label,标号用:后跟标准字符串来定义)处,goto语句一般与if配合使用,根据不同的条件来执行不同的命令组。
语法格式
goto label
基本语法,label 是需要传递的参数
标号用“:字符串”来定义,标号所在行不被执行。
if "%1" == "a" (goto aa) else (goto bb) echo 跳过这行了吗 :aa echo 传入参数正确 :bb echo 传入参数错误
根据传入的参数判断跳转到哪一行,所跳过的行不会被执行。
<Pause>
pause
运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续 。一个批处理里可以添加多个pause。 pause & exit(点击退出批处理程序)
<Rem>
rem '这是被注释的内容'
在批处理文件或CONFIG.SYS中加入注解。也可用REM命令来屏蔽命令(在CONFIG.SYS中也可以用分号(;)代替REM命令,但在批处理文件中则不能替代
:: 此种方式也能注释当前行
findstr
子主题
子主题
子主题
<Shift>
子主题
子主题
子主题
批处理文件参数
批处理文件还可以像C语言的函数一样可以使用参数,需要用到一个参数表示%
%[1-9]表示参数,参数是指在运行批处理文件时在文件名后加的以空格(或者Tab)分隔的字符串。变量可以从%0到%9,%0表示批处理命令本身,其它参数字符串用%1到%9顺序表示。
DOS没有 "允许传递9个批参数信息" 的限制, 参数的个数只会受到命令行长度和所调用命令处理能力的限制. 但是, 我们在批处理程序中, 在同一时刻只能同时引用10个参数, 因为 DOS只给出了 %0~%9这十个参数引用符.
set 变量
语法详情
基本用法
SET [variable=[string]]
参数解析
variable 指定环境变量名。
string 指定要指派给变量的一系列字符串。
参数扩展
set [[/a [expression]] [/p [variable=]] string]
参数解析
/a 将string设置成可求值的数字表达式
/p 将 variable 的值设置成输入行
variable 指定需要设置或修改的变量。
string 指定与变量关联的字符串。
/p 是让你输入 /a 是指定一个变量等于一串运算字符 什么参数也没有是让一个变量等于一串普通字符
使用特殊字符
字符 < > | & ^ 是特殊命令外壳字符,在字符串中使用时必须位于 escape 字符 (^) 之前或用引号引起来(即,"StringContaining&Symbol")。如果要使用引号将含有特殊字符的字符串引起来,则该引号将被设置成环境变量值的一部分。
范例 若要设置名为 TEST^1 的环境变量,请键入: set testVar=test^^1 若要设置名为 TEST&1 的环境变量,请键入: set testVar=test^&1
显示当前的环境设置
当只键入 set 命令时,将显示当前的环境设置。这些设置通常包含用来帮助查找磁盘上程序的 COMSPEC 和 PATH 环境变量。Windows XP 使用的两个其它环境变量是 PROMPT 和 DIRCMD。 例如:set p 从cmd中查找以p开始的变量名称
使用参数
当指定变量和字符串的值时,指定的变量值将被添加到该环境,而且该字符串与该变量关联。如果环境中已经存在该变量,新的字符串值将替代旧的字符串值。 如果只为 set 命令指定一个变量和一个等号(没有字符串),则与该变量关联的字符串值将被清除(就象变量根本不存在一样)。
使用 /a 参数
下表按优先性从高到低的运算顺序列出了支持 /a 的运算符。
运算符 执行的操作 () 分组 * / % + - 算法 << >> 逻辑移位 & 按位“和”运算 ^ 按位“异或”运算 | 按位“或”运算 = *= /= %= += -= &= ^= |= <<= >>= 分配 , 表达式分隔符
如果使用逻辑 (&& ||) 或模 (%) 运算符,请使用引号将表达式字符串引起来。表达式中的非数字字符串将被视为环境变量名,其值将转化成数字然后才进行处理。如果指定当前环境中没有定义的环境变量名,将会分配零值,允许您对环境变量进行算术运算,而不需要使用 % 找回值。
使用 /p 参数
需要用户输入参数,用户输入参数后,传值给该变量
案例:
/a
set /a num= 1+2
参数/a 设置可求值的数字表达式
/b
set /p po= promptString
set /p po= 请输入内容:
父级文件也能设置环境变量 set info = 123456 ,在子级也能调用。设置变量命不能为一个字母,否则将设置不成功
从批处理文件调用 set 变量。 从批处理文件调用变量值时,必须将该值用百分号(%)括起来。
批处理常用标记符号
CR(0D)
命令行结束符
Escape(1B)
ANSI转义字符引导符
Space(20)
常用的参数界定符
Tab(09) ; =
不常用的参数界定符
+
COPY 命令文件连接符
*?
文件通配符
“”
字符串界定符
|
命令管道符
<、>、>>、<<
文件重定向符
@
命令回显屏蔽符
/
参数开关引导符
:
批处理标签引导符
%
批处理变量引导符
批处理注释说明方法
:: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符)
rem注释内容(不能出现重定向符号和管道符号)
echo 注释内容(不能出现重定向符号和管道符号)>nul
算术运算
* / % + -
命令模式
set /a
运算优先级()
set /a 10*(2-1)
多命令运算符
&& 与
dir /b && echo “打印输出”
两条命令语法正确才能执行
|| 或
dir /b || userssssss
其中一个命令语法正确就可以执行
cmd 获取当前目录路径
echo 目录中有空格也可以加入""避免找不到路径
echo 当前CMD默认目录:"%cd%"
echo 当前盘符:"%~d0"
echo 当前盘符和路径:"%~dp0"
echo 当前批处理全路径:"%~f0"
echo 当前盘符和路径的短文件名格式:"%~sdp0"