系统关键字(感叹号!)冲突

由于是自动化部署,因此需要使用到循环,这里就不可避免的用到了延迟变量(setlocal enabledelayedexpansion)
有关延迟变量的知识,大家可以通过这篇文章涨一涨http://www.jb51.net/article/29323.htm
 
延迟变量带来的一个问题就是,文本中的感叹号(!,xml文件中的注释)被替换掉了。
解决办法就是,在给文件中字符串进行赋值前,使用endlocal禁用掉延迟变量。
 

bat读取文本时,空行的判断

空行有两种类型,一种是不包括空格的换行,一种是包括空格的换行。
如果不判断空行,在使用echo时,会输出 echo处于关闭状态。这时如果需要对读取到的字符串进行替换操作,也会报错。
        尝试过echo.,但最后发现还是会延伸出来一些问题。因此需要对这两种情况进行判断。
  1. 不包括空行的判断,在使用for循环读取的时候,可以使用 if defined var判断
  2. 包括空格的判断,使用set var=!var: =!把空格替换掉,然后使用 if "!var!"==""进行判断
以下为程序源码
 
bat运行程序
@echo  off
rem 循环查找.temp格式的模板文件并复制新文件
for /r %%a in (*.temp) do (
set f=%%a
setlocal enabledelayedexpansion
set nf=!f:.temp=!
rem 替换前,删除旧文件
if exist !nf! (
del !nf!
)
endlocal
rem 开始逐行替换旧文件
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 enabledelayedexpansion
set nf=!f:.temp=!
echo 配置文件!nf!设置成功
start !nf!
pause
endlocal
)
pause
exit

用于测试的模板文件,命名为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>

最新文章

  1. CENTOS 6.5 平台离线编译安装 Mysql5.6.22
  2. Linux下如何自己编译源代码(制作成可以安装的.deb文件)
  3. md语法之行内代码和代码片续集
  4. Rails : css或js文件无法成功预编译或调用jquery类插件时预编译问题
  5. PHP mkdir()无写权限的问题解决方法
  6. error while loading shared libraries: libXXX.so.x: cannot open shared object file: No such file or directory .
  7. mysqlbinglog基于即时点还原
  8. EF 用CallContext上下文管理
  9. js的with语句使用方法
  10. 使用Android Studio与ArcGIS Android SDK的开发环境部署和HelloWorld
  11. Linux Kernel 4.8分支第4个候选版本发布
  12. QML官方系列教程——QML Applications
  13. POJ 3311 Hie with the Pie (BFS+最短路+状态压缩)
  14. PHP实反向代理-收藏
  15. ajax 提交表单(文件)
  16. Alpha冲刺Day4
  17. pyc
  18. mysql5.7忽略大小写问题
  19. 通过google cloud API 使用 WaveNet
  20. Android 9.0更新

热门文章

  1. PHP的优良习惯(转)
  2. 使用JDK自带的VisualVM进行Java程序的性能分析
  3. 101个MySQL的调节和优化技巧
  4. ZOJ 1729 Hidden Password (字符串最小表示)
  5. PWD简介与妙用(一个免费、随时可用的Docker实验室)
  6. Python 多线程应用
  7. Render渲染函数和JSX
  8. sql快速删除所用表,视图,存储过程
  9. 一步一步构建iOS持续集成:Jenkins+GitLab+蒲公英+FTP
  10. Roman Numeral Converter-freecodecamp算法题目