DOS

- 技巧整理
- win7 删除文件文件名中带圆括号的文件
- 解决 windows 系统下 dos 显示中文乱码
- 常用 DOS 命令
- dir 查看当前路径下的文件和目录
- cd 进入目录
- cd .. 返回上一目录
- cd / 直接返回第一目录
- exit 退出 cmd
- 创建文件
- md(别名 mkdir) 建立新目录
- rd(别名 rddir) 删除目录
- del 删除文件
- copy 拷贝文件
- move 移动文件
- type 查看文件内容
- more 逐屏显示输出文件
- edit 编辑文件(已弃用)
- ren 文件重命名
- cls 清除屏幕
- ver 查看系统版本号命令
- date 设置日期
- time 设置时间
- prompt 修改命令提示符
- deltree 删除整个目录(危险慎用)
- format 格式化磁盘(危险慎用)
- diskcopy 复制整个硬盘
- label 建立磁盘卷标
- vol 显示磁盘卷标
- xcopy 复制目录
- fc 文件比较
- attrib 修改文件属性
- mem 查看当前内存(弃用)
- tree 显示当前目录结构
- set 显示当前所有的环境变量
- findstr 在文件中查找字符串
- 批处理
- 常用特殊符号
- 常用网络 DOS 命令
技巧整理
win7 删除文件文件名中带圆括号的文件
在文件管理器搜索框操作如下: System.FileName:~=“(” 这样就行,括号上加个引号 ~= 是包含的意思, ~< 是以什么为开头, = 是以什么为名, ~! 是不包含
在 windows 下的 CMD 命令行 如果需要进入其他盘目录 直接在命令提示符后输出该盘名称就好了 比如需要进入 D 盘 只需要输入 d: 回车就 OK 然后再进入下一级目录 不需要 CD
解决 windows 系统下 dos 显示中文乱码
- 进入 dos ,输入 chcp,查看当前支持的编码
- 输入命令:chcp 65001,在输入 chcp 的时候就支持的 utf-8 了
常用 DOS 命令
常用内部命令:md、cd、rd、dir、path、copy、type、edit、ren、del、cls、ver、date、time、prompt
常用外部命令:deltree、format、diskcopy、label、vol、sys、xcopy、fc、attrib、mem、tree
.com、.exe、.bat 等扩展名文件都是外部命令
dir 查看当前路径下的文件和目录
- dir /s 打印所有文件夹包括子文件夹
- dir /Q 显示文件及目录属系统哪个用户
- /T:C 显示文件创建时间
- /T:A 显示文件上次被访问时间
- /T:W 上次被修改时间
cd 进入目录
cd .. 返回上一目录
cd / 直接返回第一目录
exit 退出 cmd
创建文件
- echo 内容 > file.txt
- echo 追加内容 >> file.txt
- type nul>a.txt
- cd > a.txt
- copy nul>a.txt
md(别名 mkdir) 建立新目录
- md dir 建立新目录
rd(别名 rddir) 删除目录
- rd dir 删除空文件夹
- rd/s dir 删除文件夹(不管是否为空)
del 删除文件
- del *.txt 删除所有 txt 文件
- del /s dir 删除目录及子目录下所有文件和目录
- del /S dir 依次删除目录下文件
- del F:_desktop.ini /f /s /q /a 强制删除 F 盘下所有目录内的_desktop.ini 文件并且不提示是否删除。
copy 拷贝文件
- copy dos.txt newfile.txt
- copy dos.txt+newfile.txt multi.txt 将多个文件复制到一个文件中
move 移动文件
move file1.txt dir
type 查看文件内容
- type file.txt
more 逐屏显示输出文件
- more biglong.txt
edit 编辑文件(已弃用)
- edit file1.txt
ren 文件重命名
- ren file1.txt file2.txt
cls 清除屏幕
- 清除屏幕上的所有显示,光标置于屏幕左上角。
ver 查看系统版本号命令
- 查看当前系统版本号
date 设置日期
- date 回车 设置日期 2022/1/28
- date \t 只显示当前日期和时间,而不必输入新日期和时间
- DATE/T 同上等
time 设置时间
- time 回车 设置时间
- time /t
- TIME/T
prompt 修改命令提示符
prompt $ 使用货币提示符
- $A & (Ampersand)
- $B | (管道)
- $C ( (左括弧)
- $D 当前日期
- $E Escape 码(ASCII 码 27)
- $F ) (右括弧)
- $G > (大于符号)
- $H 后退(擦除前一个字符)
- $L < (小于符号)
- $N 当前驱动器
- $P 当前驱动器及路径
- $Q = (等号)
- $S (空格)
- $T 当前时间
- $V Windows 2000 版本号
- $_ 换行
- $$ $ (货币符号)
C:>prompt 退出 C>
deltree 删除整个目录(危险慎用)
- 将整个目录及其下属子目录和文件删除。
format 格式化磁盘(危险慎用)
- 对磁盘进行格式化,划分磁道和扇区;同时检查出整个磁盘上有无带缺陷的磁道,对坏道加注标记;建立目录区和文件分配表,使磁盘作好接收 DOS 的准备。
diskcopy 复制整个硬盘
- 复制格式和内容完全相同的软盘
label 建立磁盘卷标
- 建立、更改、删除磁盘卷标
vol 显示磁盘卷标
- 查看磁盘卷标号
xcopy 复制目录
- xcopy newdir dir
- xcopy /s newdir dir 包括子目录
fc 文件比较
比较文件的异同,并列出差异处
- fc dos.txt copydos.txt
- fc file1.txt file2.txt > 3st.txt
对比二个文件并把不同之处输出到 3st.txt 文件中,"> "和"> >"是重定向命令
attrib 修改文件属性
+ 设置属性。
- 清除属性。
R 只读文件属性。
A 存档文件属性。
S 系统文件属性。
H 隐藏文件属性
/S 处理当前文件夹及其子文件夹中的匹配文件。
/D 也处理文件夹
- attrib file.txt +h +r 设置为隐藏、只读属性
- attrib file.txt -h -r 去掉隐藏、只读属性
- attrib +a +s +h autorun 将文件夹 autorun,设为存档、系统、隐藏属性
mem 查看当前内存(弃用)
- 显示当前内存使用的情况
tree 显示当前目录结构
D:.
└─dir
└─childdir
set 显示当前所有的环境变量
- set path 显示出当前以字符 path 开头的所有环境变量
findstr 在文件中查找字符串
注意:查找字符都用双引号 /b 如果位于行的开头则匹配模式。 /s 在当前目录和所有子目录中搜索匹配的文件。 /i 指定搜索不区分大小写。 /m 如果文件包含匹配项,仅打印该文件名。 /c:string 使用指定的文本作为文字搜索字符串。
- findstr "netstat" dos.md 在文件中查找字符
- findstr "exist defined" dos.md 用空格分隔多个搜索字符串,搜索“exist”或“defined”
- findstr /c:"config.sys" dos.md 搜索“config.sys”
- findstr BAT dos.md 查找首字母 B 大写的单词 BAT
- findstr /s /i path . 要搜索包含单词 path 的当前目录和所有子目录中的每个文件,不考虑字母大小写
- findstr /b /n /c:"echo" *.md 要查找包含字 echo 开头的所有行
findstr /s /i /m "\<computer\>" *.*
找到当前目录和所有子目录中每个包含“computer”这个单词的文件,而不考虑字母的大小写。要列出包含单词“computer”的所有文件
findstr /s /i /m "\<comp.*" *.*
现在假定不仅需要查找字“computer”,而且需要查找以字母“comp”开头的所有其他字,例如“compliment”和“compete”。请键入:
@echo off
echo 111 > test.txt
echo 222 >> test.txt
find "111" test.txt
del test.txt
pause
同上
@echo off
echo 111 > test.txt
echo 222 >> test.txt
type test.txt | find "111"
del test.txt
pause
批处理
批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展 名为 BAT 或者 CMD。这些命令统称批处理命令
在键盘上按下 Ctrl+C 可以强行终止一个批处理的执行过程
rem 和 ::
- rem 为注释命令,一般用来给程序加上注解,该命令后的内容不被执行,但能回显
- :: 也可以起到注释作用,效果更简洁
任何以冒号:开头的字符行, 在批处理中都被视作标号, 而直接忽略其后的所有内容。
有效标号:冒号后紧跟一个以字母数字开头的字符串, goto 语句可以识别。
无效标号:冒号后紧跟一个非字母数字的一个特殊符号, goto 无法识别的标号,可以起到注释作用,所以 :: 常被用作注释符号,其实 :+ 也可起注释作用。
与 rem 不同的是, ::后的字符行在执行时不会回显, 无论是否用 echo on 打开命令行回显状态, 因为 命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中
echo 在屏幕上显示出信息
-
@字符放在命令前将关闭该命令回显,无论此时 echo 是否为打开状态
-
如果想关闭“ECHO OFF”命令行自身的显示,则需要在该命令行前加上“@”。
- echo 显示当前 ECHO 设置状态
-
在 DOS 提示符状态下键入 ECHO OFF,能够关闭 DOS 提示符的显示使屏幕只留下光标,直至键入 ECHO ON,提示符才会重新出现。
-
echo. 相当于输入一个回车
-
比如 echo.|time 即相当于在 TIME 命令执行后给出一个回车。所以执行时系统会在显示当前时间后,自动返回到 DOS 提示符状态
-
echo 内容 > pass.txt
-
echo 内容 >> pass.txt 将"内容"保存到 pass.txt 文件中
-
echo @echo off > autoexec.bat 建立自动批处理文件
- echo D:\book\python >> autoexec.bat 追加内容
- type autoexec.bat 查看文件内容
pause 请按任意键继续. . .
- 要显示其他提示语,可以这样用
- echo 其他提示语 & pause > nul
errorlevel 程序返回码
- echo %errorlevel%
- 每个命令运行结束,可以用这个命令行格式查看返回码,用于判断刚才的命令是否执行成功
- 默认值为 0,执行错误则返回 1
dir
echo %errorlevel% 返回0就是成功
echo? 不是内部命令
echo %errorlevel% 返回9009就是失败
title 设置 cmd 窗口的标题
- title 新标题
color [attr] 指定控制台输出的颜色属性
颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为前景。每个数字可以为以下任何值之一: 0 = 黑色 8 = 灰色 1 = 蓝色 9 = 淡蓝色 2 = 绿色 A = 淡绿色 3 = 湖蓝色 B = 淡浅绿色 4 = 红色 C = 淡红色 5 = 紫色 D = 淡紫色 6 = 黄色 E = 淡黄色 7 = 白色 F = 亮白色 如果没有给定任何参数,该命令会将颜色还原到 CMD.EXE 启动时的颜色。
- color fc 在亮白色上产生亮红色
mode 配置系统设备
- 设备状态: MODE [device] [/STATUS]
- 打印重定向: MODE LPTn[:]=COMm[:]
- 选定代码页: MODE CON[:] CP SELECT=yyy
- 代码页状态: MODE CON[:] CP [/STATUS]
- 显示模式: MODE CON[:] [COLS=c] [LINES=n]
- 击键率: MODE CON[:] [RATE=r DELAY=d]
- 设置 dos 窗口大小 15 行,113 列,背景蓝色,字体亮白
- mode con cols=113 lines=15 & color 9f
GOTO 和 :
以“:XXX”来构建一个标号,然后用 GOTO XXX 跳转到标号:XXX 处,然后执行标号后的命令 前加个冒号用来表示这个字符串是标签, goto 命 令就是根据这个冒号( :)来寻找下一步跳到到那里
@echo off
:start
set /a var+=1
echo %var%
if %var% leq 3 goto start
pause
find 在文件中搜索字符串
/V 显示所有未包含指定字符串的行。 /C 仅显示包含字符串的行数。 /N 显示行号。 /I 搜索字符串时忽略大小写。
"string" 指定要搜索的字符串,加双引号不是单引号
如果没有指定路径,find 将搜索键入的或者由另一命令产生的文字
type dos.md | find "goto" type dos.md | find /c "goto"
start 批处理中调用外部程序的命令
如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令
- start explorer d:\ 调用图形界面打开 D 盘
assoc 和 ftype
assoc 设置'文件扩展名'关联,关联到'文件类型' ftype 设置'文件类型'关联,关联到'执行程序和参数' 当你双击一个.txt 文件时, windows 并不是根据.txt 直接判断用 notepad.exe 打开,而是先判断.txt 属于 txtfile '文件类型' 再调用 txtfile 关联的命令行 txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1 可以在"文件夹选项"→"文件类型"里修改这 2 种关联
- assoc #显示所有'文件扩展名'关联
- assoc .txt #显示.txt 代表的'文件类型',结果显示 .txt=txtfile
- assoc .doc #显示.doc 代表的'文件类型',结果显示 .doc=Word.Document.8
-
assoc .exe #显示.exe 代表的'文件类型',结果显示 .exe=exefile
-
ftype #显示所有'文件类型'关联
- ftype exefile #显示 exefile 类型关联的命令行,结果显示 exefile="%1" %*
- assoc .txt=Word.Document.8 设置.txt 为 word 类型的文档,可以看到.txt 文件的图标都变了
- assoc .txt=txtfile 恢复.txt 的正确关联
- type exefile="%1" %* 恢复 exefile 的正确关联
如果该关联已经被破坏,可以运行 command.com 再输入这条命令
pushd 和 popd 切换当前目录
@echo off
c: & cd\ & md mp3 #在 C:\ 建立 mp3 文件夹
md d:\mp4 #在 D:\ 建立 mp4 文件夹
cd /d d:\mp4 #更改当前目录为 d:\mp4
pushd c:\mp3 #保存当前目录,并切换当前目录为 c:\mp3
popd #恢复当前目录为刚才保存的 d:\mp4
一般用处不大,在当前目录名不确定时,会有点帮助,dos 编程中很有用
CALL
CALL 命令可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后,再继续执行原来的批处理
@ echo off
echo 产生一个临时文件 > tmp.txt
rem 先保存单签目录,再将D:\book\ug设为当前目录
pushd D:\book\ug
call :sub tmp.txt
rem 恢复上次的当前目录
popd
call :sub tmp.txt
pause
del tmp.txt
exit
:sub
Echo 删除引号: %~1
Echo 扩充到路径: %~f1
Echo 扩充到一个驱动器号: %~d1
Echo 扩充到一个路径: %~p1
Echo 扩充到一个文件名: %~n1
Echo 扩充到一个文件扩展名: %~x1
Echo 扩充的路径指含有短名: %~s1
Echo 扩充到文件属性: %~a1
Echo 扩充到文件的日期/时间: %~t1
Echo 扩充到文件的大小: %~z1
Echo 扩展到驱动器号和路径: %~dp1
Echo 扩展到文件名和扩展名: %~nx1
Echo 扩展到类似 DIR 的输出行: %~ftza1
Echo.
Goto :eof
输出结果
删除引号: tmp.txt
扩充到路径: D:\book\UG\tmp.txt
扩充到一个驱动器号: D:
扩充到一个路径: \book\UG\
扩充到一个文件名: tmp
扩充到一个文件扩展名: .txt
扩充的路径指含有短名: D:\book\UG\tmp.txt
扩充到文件属性:
扩充到文件的日期/时间:
扩充到文件的大小:
扩展到驱动器号和路径: D:\book\UG\
扩展到文件名和扩展名: tmp.txt
扩展到类似 DIR 的输出行: D:\book\UG\tmp.txt
删除引号: tmp.txt
扩充到路径: D:\book\Dos\tmp.txt
扩充到一个驱动器号: D:
扩充到一个路径: \book\Dos\
扩充到一个文件名: tmp
扩充到一个文件扩展名: .txt
扩充的路径指含有短名: D:\book\Dos\tmp.txt
扩充到文件属性: --a--------
扩充到文件的日期/时间: 2022/01/30 14:26
扩充到文件的大小: 27
扩展到驱动器号和路径: D:\book\Dos\
扩展到文件名和扩展名: tmp.txt
扩展到类似 DIR 的输出行: --a-------- 2022/01/30 14:26 27 D:\book\Dos\tmp.txt
set aa=123456
set cmdstr=echo %aa%
call %cmdstr%
pause
本例中如果不用 call,而直接运行%cmdstr%,将显示结果%aa%,而不是 123456
shift 更改批处理文件中可替换参数的位置。
如果命令扩展名被启用, SHIFT 命令支持/n 命令行开关;该命令行开关告诉 命令从第 n 个参数开始移位; n 介于零和八之间。例如: SHIFT /2
会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0 和 %1
if 条件判断语句
语法格式如下:
if [not] errorlevel number command
if [not] string1==string2 command
if [not] exist filename command
if [not] errorlevel number command
if errorlevel 这个句子必须放在某一个命令的后面,执行命令后由 if errorlevel 来判断命令的返回值。
@echo off
rem 退出代码为>=1 就跳至标题 1 处执行, >=0 就跳至标题 0 处执行
if errorlevel 1 goto 1
if errorlevel 0 goto 0
rem 上面两行不可交换位置,否则失败了显示成功
:0
echo 命令执行成功
rem 程序执行完毕跳转至标题exit处退出
goto exit
:1
echo 命令执行失败
rem 程序执行完毕跳转至标题exit处退出
goto exit
:exit
pause
if [not] string1==string2 command
判断两个字符串是否相等,if"字符串 1"=="字符串 2" command 语句
检测当前变量的值做出判断,为了防止字符串中含有空格,可用以下格式
if [NOT] {string1}=={string2} command
if [NOT] [string1]==[string2] command
if [NOT] "string1"=="string2" command
if "abc"=="xyz" (echo 字符串 abc 等于字符串 xyz) else (echo 字符串 abc 不等于字符串 xyz)
if 1 equ 2 (echo 1 等于 2) else (echo 1 不等于 2)
if defined str (echo 变量 str 已经被赋值,其值为%str%) else (echo 变量 str 的值为空)
@echo off
set /p var1=请输入第一个比较的字符:
set /p var2=请输入第二个比软的字符:
if "%var1%"=="%var2%" (echo 输入的两个字符相同) else (echo 输入的两个字符不相同)
pause
@echo off
if "a"=="A" (echo yes) else (echo no)
pause
- if exist file1.txt (echo yes) else (echo no) 判断当前目录是否有此文件
@echo off
if exist autoexec.bat echo 文件存在
if not exist autoexec.bat echo 文件不存在
setlocal 与 变量延迟
@echo off
set a=4
set a=5 & echo %a%
pause
结果:为什么是 4 而不是 5 呢?在 echo 之前明明已经把变量 a 的值改成 5 了?
批处理运行命令的机制
批处理读取命令时是按行读取的(另外例如 for 命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。
批处理在运行到这句“set a=5 & echo %a%”之前,先把这一句整句读取并做了预处理——对变量 a 赋了
值,那么%a%当然就是 4 了!(没有为什么,批处理就是这样做的。)
而为了能够感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,也就是说“延迟”了对变量的赋值。
开启变量延迟
@echo off
setlocal enabledelayedexpansion
set a=4
set a=5 & echo !a!
pause
首先“setlocal enabledelayedexpansion”开启变量延迟,然后“set a=4”先给变量 a 赋值为4, “set a=5 & echo !a!”这句是给变量 a 赋值为 5 并输出(由于启动了变量延迟,所以批处理能够感知到动态变化,即不是先给该行变量赋值,而是在运行过程中给变量赋值,因此此时 a 的值就是 5 了
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,5) do (
set a=%%i
echo !a!
)
pause
提示:在没有开启变量延迟的情况下,某条命令行中的变量改变,必须到下一条命令才能体现。这一点也可以加以利用,
例:交换两个变量的值,且不用中间变量
@echo off
::目的:交换两个变量的值,但是不使用临时变量
::Code by JM 2007-1-24 CMD@XP
::出处: http://www.cn-dos.net/forum/viewthread.php?tid=27078
set var1=abc
set var2=123
echo 交换前: var1=%var1% var2=%var2%
set var1=%var2%& set var2=%var1%
echo 交换后: var1=%var1% var2=%var2%
pause
输出结果:
交换前: var1=abc var2=123
交换后: var1=123 var2=abc
for
基本格式
FOR %%variable IN (set) DO command [command-parameters]
- %%variable 指定一个单一字母表示可替换的参数。
- (set) 指定一个或一组文件。可以使用通配符。
- command 指定对每个文件执行的命令。
- command-parameters 为特定命令指定参数或命令行开关
参数:FOR 有 4 个参数 /d /l /r /f 的意思 /d:如果集中包含通配符,则指定与目录名匹配,而不与文件 名匹配。
这个参数主要用于目录搜索,不会搜索文件,例子
@echo off
for /d %%i in (D:\book\*) do echo %%i
pause
常用特殊符号
管道符号(|)
- dir /s /b /a | find ".txt" 查找当前文件夹中含有.txt 的所有文件、文件夹
- echo %date:~,10%|clip 将当前日期放在剪贴板中,ctrl+v 粘贴即可看效果
常用网络 DOS 命令
- winver 弹出一个窗口显示版本信息(内存大小、系统版本、补丁版本、计算机名)
- netstat -an 查看所有连接本机 IP
- ipconfig /all 查看所有连接本机 IP
- telnet IP 端口 连接对方机器某个端口
- net user 查看本机用户
- net user 用户名 密码 /add 建立一个用户
- net user 用户名 /del 删除一个用户
- net localgroup administrators 用户名 /add 把用户添加到管理员
-
net localgroup administrators 用户名 /del 把用户从管理员组删除
-
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 ip 查看对方局域网内开启了哪些共享
- 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)
-
finger username @host 查看最近有哪些用户登陆
-
telnet ip 端口 远和登陆服务器,默认端口为 23
-
regedit /s 注册表文件名 导入注册表;参数/S 指安静模式导入,无任何提示;
- regedit /e 注册表文件名 导出注册表
