bat文件相关知识
删除文件名中的指定字符:
@echo off
rem !a! 是变量的意思 正常的应该是 %a% 你这是在启动了延迟变量的情况下就要将%改为!号
rem %%i 应该是for中的语句,通过for设的变量
setlocal enabledelayedexpansion
set /p str=enter the delete string:
for /f "delims=" %%a in ('dir /a-d/b *.avi*') do (
set new=%%~a
ren "!new!" "!new:%str%=!")
@echo delete success
pause
- setlocal enabledelayedexpansion:允许变量延迟扩展,在for等语句中用%a%语法读取变量一直是初始值(即使你在for语句里面改变了变量的值) ;变量延迟扩展用!a! 感叹号代替百分号读取变量的值,取出的是变量的实时值。
- echo 和@echo的区别
echo: 会在shell中显示echo这条命令和后面要输出的内容
@echo: 不会显示echo这条命令,只会显示后面要输出的内容 - set的主要作用是赋值
set /p a=promptstring
先显示promptstring,再接受用户输入的内容,以回车表示结束,赋值给变量a
set /p a=promptstring<1.txt
先显示promptstring,再把"<“管道号右边的1.txt文件中从第一个字符开始直到碰到回车符的内容赋值给变量a (通常表现为第一行)。
set /p a=promptstring<nul
先显示promptstring,再把”<"管道号右边nul中内容赋值给变量a ,不用用户按回车就结束语句。因nul是空设备,故没有内容可赋值,变量a仍属未定义。
4.dir /a-d/b *.avi
/a-d 显示文件
/a d 显示目录
/b 显示文件名、扩展名
5.delims=符号集 分隔符
空格默认作为分隔符
@echo off
for /f "delims=" %%a in ('dir /a-d/b *.avi*') do echo %%a
pause>nul
运行拮果:
当前目录下所有的avi视频文件的文件名
讲解:
“delims=”代表取消默认以空格作为分隔符。
批处理默认空格是分隔符,分隔符会隐藏第一个分隔符后面的所有内容。为了显示完整的信息,所以有必要取消该功能。
因此,当文件名或路径中含有空格时,需要用双引号括住。如果不使用双引号,括号内的内容将被当做文件名,如果文件名不存在,将提示“系统找不到……”。
如果不使用“delims=”,即使使用双引号,也只能显示第一个空格前面的字符串,后面的字符串将被默认忽略。
“For /f”:解析文本,读取字符串。
“For /f”常用来解析文本,读取字符串。分工上,delims负责切分字符串,而tokens负责提取字符串。如果把字符串当作蛋糕,Delims像刀子,用来切蛋糕,tokens像叉子,用来取切好的蛋糕。
1.Delims的语法:
FOR/F “Delims=符号集” %%I IN (Command1) DO Command2
忽略分隔符,切分字符串
2.Tokens的语法:
FOR/F “tokens=xym-n” %%I IN(Command1) DO Command2
提取指定的列