利用批处理(BAT)读取字符串空行判断及其他
来源:互联网 发布:求最大公约数c语言 编辑:程序博客网 时间:2024/05/21 12:50
最近要给一个项目发布产品安装包,使用到BAT来自动配置一些环境变量。
由于之前很少用BAT,在编写过程中,还是遇到不少坑。
在这里,把这些坑给摆出来,以免有些小白掉进去
系统关键字(感叹号!)冲突
由于是自动化部署,因此需要使用到循环,这里就不可避免的用到了延迟变量(setlocal enabledelayedexpansion)
有关延迟变量的知识,大家可以通过这篇文章涨一涨http://www.jb51.net/article/29323.htm
延迟变量带来的一个问题就是,文本中的感叹号(!,xml文件中的注释)被替换掉了。
解决办法就是,在给文件中字符串进行赋值前,使用endlocal禁用掉延迟变量。
bat读取文本时,空行的判断
空行有两种类型,一种是不包括空格的换行,一种是包括空格的换行。
如果不判断空行,在使用echo时,会输出 echo处于关闭状态。这时如果需要对读取到的字符串进行替换操作,也会报错。
尝试过echo.,但最后发现还是会延伸出来一些问题。因此需要对这两种情况进行判断。
- 不包括空行的判断,在使用for循环读取的时候,可以使用 if defined var判断
- 包括空格的判断,使用set var=!var: =!把空格替换掉,然后使用 if "!var!"==""进行判断
bat运行程序
@echo offrem 循环查找.temp格式的模板文件并复制新文件for /r %%a in (*.temp) do (set f=%%asetlocal enabledelayedexpansion set nf=!f:.temp=!rem 替换前,删除旧文件if exist !nf! (del !nf!)endlocalrem 开始逐行替换旧文件for /f "eol== delims=" %%i in ('findstr /i /n .* %%a') do (set "var=%%i"rem 后面要用到变量,因此此处启用延迟变量setlocal enabledelayedexpansion set var=!var:*:=!rem 获取需要生成的目标文件名 set nf=!f:.temp=!set tmp=!var: =!rem 排除无空格空行if defined var (rem 排除包含空格的空行if /i not "!tmp!"=="" ((echo !var!)>>!nf!) else (echo.!var!>>!nf!)) else (echo.>>!nf!)rem 此处禁用延迟变量,以使下一次循环时,能够正常读取字符endlocal )setlocal enabledelayedexpansionset nf=!f:.temp=!echo 配置文件!nf!设置成功start !nf!pauseendlocal)pauseexit用于测试的模板文件,命名为test.txt.temp
<configuration><!----> <appSettings> <add key="FILE_SERVICE_URI" value="http://$ip$:8080/bingo.dataone/"/> <add key="DATA_SERVICE_URI" value="http://$ip$:8080/bingo.dataone/dataservice.dsr"/> <add key="IS_USE_PERMISSION" value="true"/> <!--下面一行为无空格的空行--> </appSettings><!--下面一行为有空格的空行--> </configuration>
0 0
- 利用批处理(BAT)读取字符串空行判断及其他
- 批处理 bat 文件中,如何输出空行?
- sqlite 利用bat批处理
- sqlite 利用bat批处理
- BAT批处理中的字符串处理详解(字符串截取),bat批处理
- bat 批处理之字符串操作
- bat批处理字符串截取补充
- 批处理(bat)常用指令及其作用
- 批处理(bat)判断某个程序是否运行
- bat 批处理判断服务和进程
- 利用bat批处理启动MongoDB数据库
- BAT批处理中的字符串处理详解
- BAT批处理中的字符串处理详解
- 批处理(bat)脚本语言(5) - 字符串处理
- Windows批处理BAT字符串操作 && Windows批处理函数编程
- 批处理 字符串替换、大小写判断
- windows下脚本设置安全站点及其他(bat)
- windows下脚本设置安全站点及其他(bat)
- Codefroces 429 B. Working out
- goole map 根据地址获取经纬度
- Raw-OS源码分析之任务删除与总结
- Android架构分析之Android消息处理机制(一)
- c#连接Redis缓存数据库Redis的安装与配置
- 利用批处理(BAT)读取字符串空行判断及其他
- 如果有一天
- 为Python添加默认模块搜索路径
- declare-styleable中format详解
- qemu网络启动模式配置
- javascript 原型成员方法使用成员属性
- Make Menuconfig详解
- 其实我们都是很平凡的
- 推荐好用的Jquery模板插件Jtemplate