bat 脚本 for /f "delims=", delims的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bat 脚本 for /f "delims=", delims的使用相关的知识,希望对你有一定的参考价值。

delims=之后的内容作为字符串的拆分字符,只能是单个的字符,不能够用单词拆分,请问怎样才能使delims之后的内容作为一个单词拆分字符串呢?
例如:
for /f "tokens=1-3 delims=a" %1 in ("abaacadaaeaf") do echo %1 %2 %3
输出的结果是:wer tyur uio
这是以'a'作为拆分字符,如果我想以"aa"作为拆分字符,且得到结果
ab cad eaf要怎样书写呢?
谢谢各位高手。
PS:如果delims后面的分隔符我想要用引号作为分隔符要怎么写呢?
谢谢大家,大家的做法都能够得到最后的结果,但是我的意思是delims后面的究竟能不能是一个字符串啊??

1、在桌面新建文件夹bat_sql_import,bat_sql_import中新建文件夹all_sql,把所有要执行的sql拷贝到all_sql中。

2、在bat_sql_import中新建txt文件,命名为sql_imp.bat。

3、因为修改了扩展名,会有重命名提醒,点击确定。

4、右键-编辑,打开sql_imp.bat。

5、把以下代码粘贴进去::echo off ::@echo offecho 开始执行数据库脚本...for %%i in (all_sql\\*.sql) do (echo 正在执行 %%i 请稍后...echo set names utf8;>all.sqlecho source %%i>>all.sqlmysql -u root -p123456 --。

6、双击sql_imp.bat运行批处理,完成导入。

参考技术A 使用delims的目的主要是通过切分字符串获得可编辑的字符串以便于进行下一步编辑。Delims好比一把西瓜刀,文本信息就好比西瓜,使用delims这把西瓜刀将文本这个西瓜切分成许多小块,这样吃起来就方便了。…… -
代码:
@echo off
for /f "delims=:" %%a in (易经.txt) do echo %%a
pause>nul
运行结果将显示第一小节(列)的内容。
原因是没有定义显示的列,默认情况下忽略第一个分隔符(冒号)后面的内容。
要显示列,需要用到下节学习的tokens。如:
@echo off
for /f "tokens=1,2 delims=:" %%a in (易经.txt) do echo %%a %%b
pause>nul
你也可以使用冒号(:)和逗号(,),写法是“delims=:,”(使用英文双引号)。原文中的每行文字将被作为分隔符的冒号和逗号分成多个小节:(不知道百度怎么搞的,竟然说我的表格超载!省略了)
代码:
@echo off
for /f "delims=:," %%a in (易经.txt) do echo %%a
pause>nul
运行结果将显示第一小节(列)的内容。
没有定义列的时候,默认只显示第一列,忽略分隔符和第一个分隔符后的内容。
例如:文本“静夜思.txt”的内容是:
床前明月光,疑是地上霜,举头望明月,低头思故乡。
文本中有四句古诗,诗句之间用逗号分隔。古诗原本是没有标点符号的,标点符号是后人才加上去的。逗号在语文上是语气暂停的意思,其实就是用来分隔语句意思以便于阅读和理解。Delims=,的意思就是提取逗号做分隔符,并以此将诗句分成四个小列或小节。
第一列 分隔符 第二列 分

符 第三列 分

符 第三列
第一行 床前明月光 , 疑是地上霜 , 举头望明月, , 低头思故乡。

如果我要用for将四句诗都显示到屏幕上,不需要任何参数即能实现:
@echo off
for /f %%i in (静夜思.txt) do echo %%i
pause>nul
如果我只要“床前明月光”这句话,就需要delims帮忙了:
@echo off
for /f "delims=," %%i in (静夜思.txt) do echo %%i
pause>nul
讲解:
delims=后面跟了一个逗号,表示用原文中的逗号作为分隔符(划分的方法)将古诗分成四个小节。默认情况下,delims只显示分隔符前的第一小节,分隔符通常被忽略掉。显示其他小节的诗句要用到列提取命令“tokens”。
仍用前面eol里的文本“a.txt”做试验。
例:如何只显示每行的第一个标点前的内容?
@echo off
for /f "eol=: delims=,, " %%i in (a.txt) do echo %%i
pause>nul
运行结果显示:
aaa
iii
eee
你好
注意:
文本中有英文的点号和中文的逗号,点号要放在逗号前面。
符号集中(也就是=后面的标点符号),各个符号之间没有空格。
文本中用空格分隔的,符号集里中文逗号后面只有一个空格,且必须放到最后。
用于分隔的标点符号重复的一般只取一个做代表。
for默认是以空格和,:;/等标点符号作分割符的,所以要取得整行内容通常会用"delims="这样的形式来取消for的默认分割符。
例:为什么第三行的iii后面的内容不见了?
@echo off
for /f %%i in (a.txt) do echo %%i
pause>nul
讲解:
这里没有使用delim进行分隔,而带有空格的行空格后面的内容被忽略了,原因就是默认情况下,也就是没有即使没有用delims选项,for也会以空格作为分隔符,将空格后的内容屏蔽掉。
使用delims的目的主要是通过切分字符串获得可编辑的字符串以便于进行下一步编辑。Delims好比一把西瓜刀,文本信息就好比西瓜,使用delims这把西瓜刀将文本这个西瓜切分成许多小块,这样吃起来就方便了。
如果你想吃其中的某一块,怎么办呢?直接用刀叉tokens提取就可以了。本回答被提问者和网友采纳
参考技术B @echo off
for /f "tokens=*" %%1 in ("abaacadaaeaf")do (set.=%%1&call set .=%%.:aa=@%%
for /f "tokens=1-3 delims=@" %%1 in ('call echo %%.%%')do echo %%1 %%2 %%3)
pause>nul

引号作为分隔符的写法雷同,先将引号替换~

楼上也是队友O(∩_∩)O哈!

参考资料:如果回答对您有帮助请及时采纳,一起为BAT-GO团队升级出一分力~

参考技术C @echo off
set a=abaacadaaeaf
set a=%a:aa=%
echo %a:~,3% %a:~2,3% %a:~-3%
pause
楼上别学我的^.^

不能 你试试去掉tokens 就知道了!

以上是关于bat 脚本 for /f "delims=", delims的使用的主要内容,如果未能解决你的问题,请参考以下文章

bat中运用for /r命令

bat运行出错,提升找不到文件,或者F=文件,D=目录?

批处理 for的详细用法 for /l /f /d /r 不要ctrl V 的

批处理bat计算两个时间差

我写了一个BAT脚本获取指定网卡的IP地址,但是一直不成功,求大佬帮我看看

如何使用批处理脚本对目录中的每个文件执行某些操作