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

由于是自动化部署,因此需要使用到循环,这里就不可避免的用到了延迟变量(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>

bat 中的特殊符号输出问题的更多相关文章

  1. Bat 中特殊符号

    批处理.Bat 中特殊符号的实际作用,Windows 批处理中特殊符号的作用: @\\隐藏命令的回显. ~\\在for中表示使用增强的变量扩展:在set中表示使用扩展环境变量指定位置的字符串:在set ...

  2. 【转】【bat】Bat 中特殊符号

    批处理.Bat 中特殊符号的实际作用,Windows 批处理中特殊符号的作用: @\\隐藏命令的回显. ~\\在for中表示使用增强的变量扩展:在set中表示使用扩展环境变量指定位置的字符串:在set ...

  3. [转]bat中的特殊字符,以及需要在bat中当做字符如何处理

    bat中的特殊字符,以及需要在bat中当做字符如何处理 批处理.Bat 中特殊符号的实际作用,Windows 批处理中特殊符号的作用: @ \\隐藏命令的回显. ~ \\在for中表示使用增强的变量扩 ...

  4. bat中的特殊字符,以及需要在bat中当做字符如何处理

    bat中的特殊字符,以及需要在bat中当做字符如何处理 (2014-02-27 21:16:55) 转载▼ 标签: bat 特殊字符 分类: develop bat中的特殊字符,以及需要在bat中当做 ...

  5. 关于C语言中的强符号、弱符号、强引用和弱引用的一些陋见,欢迎指正

    首先我表示很悲剧,在看<程序员的自我修养--链接.装载与库>之前我竟不知道C有强符号.弱符号.强引用和弱引用.在看到3.5.5节弱符号和强符号时,我感觉有些困惑,所以写下此篇,希望能和同样 ...

  6. 浅谈C语言中的强符号、弱符号、强引用和弱引用

    摘自http://www.jb51.net/article/56924.htm 浅谈C语言中的强符号.弱符号.强引用和弱引用 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2014- ...

  7. 深入理解计算机系统(2.5)------C语言中的有符号数和无符号数以及扩展和截断数字

    上一篇博客我们讲解了计算机中整数的表示,包括无符号编码和补码编码,以及它们之间的互相转换,个人觉得那是非常重要的知识要点.这篇博客我们将介绍C语言中的有符号数和无符号数以及扩展和截断数字. 1.C语言 ...

  8. Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器

    Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型 ...

  9. linux中如何通过echo输出!(叹号)? -bash: !": event not found

    需求描述: 今天在做通过echo结合passwd给用户改密码的过程中,出现无法修改的错误. 错误如下: [root@testvm ~]# useradd mytest [root@testvm ~]# ...

随机推荐

  1. jquery实现的导航栏切换

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Android自定义组件系列【17】——教你如何高仿微信录音Toast

    一.Toast介绍 平时我们在Android开发中会经常用到一个叫Toast的东西,官方解释如下 A toast is a view containing a quick little message ...

  3. BZOJ 1806: [Ioi2007]Miners 矿工配餐

    ime Limit: 10 Sec  Memory Limit: 64 MBSubmit: 910  Solved: 559[Submit][Status][Discuss] Description ...

  4. Distributed Transaction Coordinator(DTC)一些问题的解决方法

    有时运行某个程序或者安装SQL Server时报错. 错误信息: 事务管理器不可用.(从 HRESULT 异常: 0x8004D01B) 启动服务Distributed Transaction Coo ...

  5. 抓取GridView "编辑"模式下,TextBox修改后的数值

    [FAQ]抓取GridView "编辑"模式下,TextBox修改后的数值 -- ASP.NET专题实务「上集」Ch.10 抓取GridView "编辑"模式下 ...

  6. Codeforces 786E. ALT 最小割+倍增

    E. ALT http://codeforces.com/problemset/problem/786/E 题意: 给出一棵 n 个节点的树与 m 个工人.每个工人有一条上下班路线(简单路径),一个工 ...

  7. self & this 上下文

    对象:指向对象的首地址: 函数:代表了函数运行的主要上下文: 内部:在类的内部使用. self Within the body of a class method, self refers to th ...

  8. Linux 备份

    备份之前的准备工作 安装常用的软件 常用软件的安装,见我另一篇blog Ubuntu 16.04 安装札记 的第四部分. 清理系统中没用的垃圾 至于垃圾清理,主要清理对象有 sudo rm -r ~/ ...

  9. 原型模式 -- JavaScript语言的灵魂

    原型模式就是将原型对象指向创建对象的类,使这些类共享原型对象的方法与属性.JS是基于原型链实现对象之间的继承,是对属性或者方法的共享,而不是对属性和方法的复制. // 图片轮播类 var LoopIm ...

  10. cnpm 莫名奇妙bug 莫名奇妙的痛

    cnpm 莫名奇妙bug 莫名奇妙的痛 最近想搭建react@v16 和 react-router@v4,搭建过程打算用vue脚手架webpack模板那套配置方法(webpack3). 由于我之前安装 ...