【Dos-BatchPrograming】01
——0、
1、文件后缀的延申
官方教程更推荐使用.cmd作为后缀
.cmd和.bat的区别:
http://www.360doc.com/content/12/0810/09/3688062_229346243.shtml
bat后缀面向原始的MS-DOS系统的解释器执行
cmd后缀面向后来的WindowsNT系统的解释器执行,但是NT也兼容了bat后缀
只是dos部分命令不能被NT兼容
2、文件执行
可以使用完整的字符串访问执行
Microsoft Windows [版本 10.0.19041.746] (c) 2020 Microsoft Corporation. 保留所有权利。 C:\Users\Administrator>"D:\hello.cmd" hello dos batch!!!
3、变量的赋值符号不能有空格
set var=100
学习参考:
https://www.w3cschool.cn/pclrmsc/tdsgnn.html
——1、echo回显
一、hello-world
echo hello patch program! pause
输出:
可以发现,echo命令 = 文件绝对路径 + echo命令本身 + 单行的字符串
这样输出出来,然后再输出命令后面的文本?
D:\dos-patch>echo hello patch program! hello patch program! D:\dos-patch>pause 请按任意键继续. . .
二、取消echo本身的显示
如果不要输出第一行的完整输出,使用@echo命令
@echo hello patch program! pause
输出:
hello patch program! D:\dos-patch>pause 请按任意键继续. . .
三、echo回显控制
单独列出一行@echo on 表示开启回显
单独列出一行@echo off 表示关闭回显
@echo on echo the echo command and string will output in screen @echo off echo only string output pause
输出:
D:\dos-patch>echo the echo command and string will output in screen the echo command and string will output in screen only string output 请按任意键继续. . .
四、echo空行
使用echo.让输出空出一行,“.”要紧跟在ECHO后面,中间不能有空格
另外,“.”可以用“,:;”/]+\ 这些任一符号替代。
@echo on echo the echo command and string will output in screen @echo off echo only string output echo. echo this is a nextline pause
输出:
D:\dos-patch>echo the echo command and string will output in screen the echo command and string will output in screen only string output this is a nextline 请按任意键继续. . .
五、echo配合管道完成命令
格式:ECHO 回复|命令表达式 作用:通过管道命令 | 把“回复”作为输入传导给后面的“命令表达式”,并作为“命令表达式”的输入。(注 意,管道命令|的输入方法,shift键 \) 例5 @echo off rd /s c:\abc pause 执行显示: c:\abc, 是否确认(Y/N)? 解释一下,这里abc是一个不为空的文件夹,用rd 命令删除时它将会询问你Y或N,这时你就要手动的输入Y/N了。 OK,我们把批处改一下,这时系统将会自动帮助我们把Y输入确认了
六、利用写入操作进行文件的创建和内容写入
在bat程序文件所在的目录中创建一个新的文件并且内容为空
echo off echo. >newfile.txt pause
创建文件的同时并且写入内容
echo off echo '需要写入的内容' >文件名
七、REM注释
rem 要注释的字符内容
echo off echo normal content ... rem hide content... pause
注释的内容在终端中不会输出
D:\dos-patch>echo off normal content ... 请按任意键继续. . .
同样使用::也可以进行注释,终端将会理解为无效号标号而进行注释
作用是一样,但是两者的在机器执行的含义不一样
echo off echo normal content ... rem hide content... :: use special char to hide content... pause
输出:
D:\dos-patch>echo off normal content ... 请按任意键继续. . .
一些注意事项:
任何以冒号:开头的字符行,在批处理中都被视作标号, 而直接忽略其后的所有内容。
有效标号:冒号后紧跟一个以字母数字开头的字符串,goto 语句可以识别。
无效标号:冒号后紧跟一个非字母数字的一个特殊符号,goto 无法识别的标号,可以起到注释
作用,所以 :: 常被用作注释符号,其实 : 也可起注释作用
与 rem 不同的是, :: 后的字符行在执行时不会回显, 无论是否用echo on 打开命令行回显状态,
因为命令解释器不认为他是一个有效的命令行, 就此点来看, rem 在某些场合下
将比 :: 更为适用; 另外, rem 可以用于 config.sys 文件中
——2、CD变更当前工作路径
1、变更工作路径
CD 是 change directory 改变目录的缩写
通常用于终端直接使用,在bat程序中也可以使用,要注意的是cd仅限于同一盘符下的目录变更
不同的盘符下的目录变更,尽管终端不会报错,但是执行是无效的,所以需要这样一个强制执行盘符切换
C: cd C:\Program Files\Java\jdk1.8.0_261\bin cd .. cd . cd C:\Program Files\ pause
输出:
D:\dos-patch>C: C:\>cd C:\Program Files\Java\jdk1.8.0_261\bin C:\Program Files\Java\jdk1.8.0_261\bin>cd .. C:\Program Files\Java\jdk1.8.0_261>cd . C:\Program Files\Java\jdk1.8.0_261>cd C:\Program Files\ C:\Program Files>pause 请按任意键继续. . .
或者在跨盘符切换的路径之前加上参数/d
cd /d C:\Program Files\
2、显示当前工作路径的绝对路径
@echo %cd%
——3、DEL删除
用于删除一个或者多个的文件或者目录,
注意!被删除的文件或者目录无法在回收站中找回
erase '需要删除的文件' del '需要删除的文件'
没有声明路径,则会从当前工作目录下寻找声明的文件进行删除
del aaa.txt pause
如果文件已经删除或者不存在此文件则会报错:
D:\dos-patch>del aaa.txt 找不到 D:\dos-patch\aaa.txt D:\dos-patch>pause 请按任意键继续. . .
命令的附带参数:
/P 删除每一个文件之前提示确认。 /F 强制删除只读文件。 /S 从所有子目录删除指定文件。 /Q 安静模式。删除全局通配符时,不要求确认。 /A 根据属性选择要删除的文件
——4、COPY & XCOPY 复制
copy命令只允许文件的拷贝,对目录的复制是无效的
copy '原始文件' '新文件'
1、原始文件和新文件都可以是相对路径或者绝对路径,所以建议使用绝对路径以区分
2、拷贝在同一目录下,一定要更改新文件的名称,两个文件的名称不可以为同一个
3、对目录进行拷贝可以将目录下的文件拷贝新的目录中
4、出现已经存在的文件,拷贝过去的文件会产生冲突,替换,不替换,全部替换三种选择
文件的合并操作:
copy 文件1 + 文件2 ... 文件N 新文件
首参数声明的一系列文件会按照参数描述的顺序在新的文件中进行写入
对于一些音频视频文件可以用这种方法进行简单的拼接处理。
XCOPY对目录进行的操作功能更多
1、复制文件和非空的目录(包括非空的子目录)
xcopy /s c:\xx\xxx\ d:\xx\sss\
复制C盘的xx目录下的xxx目录下的所有文件及子目录到d盘的xx目录下的sss目录中
并且排除掉空的目录
2、/T 只复制子目录结构(即目录树),不复制文件。要复制空目录,必须包含 /e 选项。
xcopy /e c:\xx\xxx\ d:\xx\sss\
3、/Y 禁止提示您确认要覆盖现存的目标文件。(强制进行覆盖操作)
4、/H 复制具有隐藏和系统文件属性的文件。默认情况下xcopy 不复制隐藏或系统文件。
5、文件还是目录?
★注意指定 Destination 是文件还是目录。 如果 Destination 不包含现有目录且不以反斜杠 (\) 结尾,会出现下列消息: Does destination specify a file name or directory name on the target (F = file, D = directory)? 系统将会询问你 目标 X:\XXX 是文件名还是目录名 (F = 文件,D = 目录)? 如果要将一个或多个文件复制到一个文件,请按 F。如果要将一个或多个文件复制到一个目录,请按 D。
——5、MD目录创建
Make Directory 创建目录
windows操作系统允许目录的名称含有空格,所以在一般的文件操作中,建议使用双引号进行修饰以区别参数含义
md 路径 + 目录名
md命令支持多个目录参数,所以可以一次创建多个目录和多层级目录
——6、RD目录删除
Remove Directory 的意思
可以使用rd简写,也可以使用rmdir
该命令默认情况下只删除空的目录
若要删除目录的一切,需要加上 /S参数
rd /s d:\123
参数/q表示安静执行,屏蔽操作警告选择,按照YES回答执行
——7、REN 重命名
Rename的意思,命令ren 或者 rename 都可以执行
rename 原始文件 新文件
可以配合通配符进行批量文件的名称变更
rename *.avi *.txt
注意事项:
★当文件具有隐藏属性或系统属性的时候,ren不能直接重命名,需要把文件的隐藏或系统属性去掉方可更名
——8、MOVE 移动文件
move 文件(目录) 文件(目录)
该命令一样可以实现rename命令
注意事项:
★MOVE命令可以跨分区移动文件,却不可以跨分区移动文件夹。
★对于跨分区移动文件时,如果目标位置存在和将要移动的文件同名时,系统会提示:“文件存在” 最后,命令将不会执行。
★对于隐藏或系统属性的文件,只有把它们的属性去除后,move命令才会执行。
——9、FIND 字符查找
1、在abc.txt中查找字符串abc的行。
find "abc" d:\abc.txt
基本格式:find "要查找的字符串" 要查找的文件(不在当前目录则需要给出完整路径)
2、通过/I 参数可以不区分要查找的字符串“abc”的大小写。
find /i "abc" d:\abc.txt
参数/i代表的是“Ignore”(忽略),也就是忽略大小写。/I 搜索字符串时忽略大小写。
3、通过/n参数我们可以查找到字符串"abc"所在的行号。
find /n "abc" d:\abc.txt
参数/n代表英语单词“Number”(号码).。/N 显示行号。
4、通过/c参数我们可以统计包含"abc"字符串的行数。
find /c "abc" d:\abc.txt
参数/c是英语单词“Count”(计数)的缩写。/C 仅显示包含字符串的行数。
5、在这里表示查找不包含"abc"字符串的行。
find /v "abc" d:\abc.txt
这个参数用于找出文件中不包含指定字符串的行。/V 显示所有未包含指定字符串的行。
注意:find命令中要查找的字符串一字要用双引号" "括起来。