Windows batch,echo到文件不成功,只打印出ECHO is on.
jenkins 执行Windows batch command的时候,如果想要读写文件,echo到文件不成功.
bat 代码如下:
set ctime=%date%_%time%
echo %ctime%>test.txt
echo %FOLDERNAME%>test.txt
echo "finished!"
执行完毕,打开文件只有一句:

修改bat代码:
set ctime=%date%_%time%
echo %ctime%>test.txt
echo %FOLDERNAME%>test.txt
echo "finished!">test.txt
打开文件发现finished写入文件成功了。

初步怀疑是bat写入文件只对字符串有效, 对变量失效了。但是仔细一想,这段代码是逐步执行,不会出现变量延迟的情况。于是,把> 改写成>> 。
这样的话代表追加到文件,而不是写入。
set ctime=%date%_%time%
echo %ctime%>>test.txt
echo %FOLDERNAME%>>test.txt
echo "finished!">>test.txt
执行两次,结果如下:

由此可见,并非是变量和string有所不同,而是echo变量到文件后,ECHO is on被写入了文件,从而冲掉了之前的echo。
那ECHO is on 又是从哪里来的呢?
原来代码里的
echo %FOLDERNAME%>>test.txt
会因为%FOLDERNAME%未定义,打印出来ECHO is on.
为何会如此呢?
因为bat里的有一个命令:echo 执行的结果就是ECHO is on, 当%FOLDERNAME% 未定义的时候,bat会自动将这行代码解析成:
echo >>test.txt
稍微有点儿诡异,不报错,而是直接用忽略变量,执行echo的结果写入test.txt文本文件。这里有两点:
1. 变量未定义,则该行命令,直接忽略该变量,可能就完全成为了另外一个动作了。如果碰巧该命令能够顺利执行,那么将不会报错。
这是一个很容易捡漏的地方,如果按照正常逻辑读代码,完全正确的脚本,可能会因为没有正确赋值,成为另外一个完全不同的脚本。(安全隐患。。。。)
2. >>写入文件的动作,是将>>前面的执行结果写入。简单点而说,如果是fn(s) >>test.txt。 那么写入动作,是会等待fn执行完毕写入return返回值的。虽然bat没有函数这一个概念。
至于以后写bat处理写入文件:
1.首先清空文件:
cd .>test.txt
2.然后使用>>追加文件写入需要写入的内容。
Windows batch,echo到文件不成功,只打印出ECHO is on.的更多相关文章
- windows batch语法
windows BATCH基本知识扩展名是bat(在nt/2000/xp/2003下也可以是cmd)的文件就是批处理文件. ==== 注 =============================== ...
- 深入浅出Windows BATCH
1.什么是Windows BATCH BATCH也就是批处理文件,有时简称为BAT,是Windows平台上的一种可运行脚本,与*nix(Linux和Unix)上的Shell脚本和其它的脚本(Perl, ...
- Batch - windows batch 常用命令(cheat sheet)
原文地址:https://www.oschina.net/code/snippet_158297_4964 1 echo 和 @ 回显命令 @ #关闭单行回显 echo off #从下一行开始关闭回显 ...
- Windows 下目录及文件向Linux同步
本文解决的是Windows 下目录及文件向Linux同步的问题,Windows向 Windows同步的请参考:http://www.idcfree.com/article-852-1.html 环境介 ...
- Windows下如何将一个文件夹通过Git上传到GitHub上(转)
在通过windows系统的电脑上写代码,需要将项目上传到GitHub上去.比如在Pycharm上写Django后端,整个项目是一个文件夹的形式,那么怎么才能这个文件夹通过Git命令上传到GitHub上 ...
- mac连接windows远程桌面及文件复制
最近更换mac办公,但由于之前是用windows,所以很多文件项目之类的东西都还在windows电脑中,一次都传到mac上又会比较占内存,并且使用率也不高,感觉不划算.但每次想用的时候,在从windo ...
- Windows系统中监控文件复制操作的几种方式
http://blog.sina.com.cn/s/blog_4596beaa0100lp4y.html 1. ICopyHook 作用: 监视文件夹和打印机移动,删除, 重命名, 复制操作. 可以得 ...
- jenkins 如何处理windows batch command
这两天一直被一个问题困扰. 在jenkins的windows batch command 测试好的,拿到bat文件中,再从Execute Windows Batch command 中调用这个bat, ...
- 宿主机Windows访问虚拟机Linux文件(二)
上一篇文章中详细讲述FTP服务(基于文件传输协议的服务),本文则介绍另一种能够实现此功能Telnet(Telecommunications network 远程登陆)服务.本文介绍的telnet我常用 ...
随机推荐
- spring-mvc.xml报错cvc-complex-type.2.4.c
添加 <!-- 定义请求处理映射HandlerMapping --> <bean id = "handlerMapping" class = "org. ...
- asp.net datatable 导出为 txt
如下是导出到TXT的方法 public static void ToTxt(DataTable dv, string FileName) { System.IO.StringWriter sw = n ...
- paip.获取文件名从路径uapi java python php总结...
paip.获取文件名从路径uapi java python php总结... =====uapi basename_noext($fname); =============java 自己写.. St ...
- 关于《精通移动App测试实战:技术、工具和案例》图书勘误信息
首先,对由于我们工作的疏忽向<精通移动App测试实战:技术.工具和案例>读者朋友们表示歉意,同时已将这些问题反馈给了出版社编辑同志,再版时将会统一修正: 其次,勘误信息请参看附件pdf文档 ...
- nginx是一个反向代理的软件
nginx只是一个反向代理的软件,和语言无关,理论上支持任何Web平台,当然http://Asp.net也不例外,http://51aspx.com就是http://Asp.net开发的,前端暴漏的是 ...
- Meanshift filter实现简单图片的卡通化效果
利用Meanshift filter和canny边缘检测的效果,可以实现简单的图片的卡通化效果.简单的说,就是用Meanshift filter的结果减去canny算法的结果得到卡通化的效果. ...
- Backbone.js Wine Cellar 教程
中文版: http://rd.189works.com/article-74541-1.html http://www.189works.com/article-74542-1.html http:/ ...
- python安装包工具pip的安装
官方的安装帮助页面:http://pip.readthedocs.org/en/latest/installing.html windows: 下载代码get-pip.py, 运行该代码, 这个代码会 ...
- 使用Microsoft.Office.Interop.Excel.Application xlApp 生成Excel
object filePath = @"C:\" + DateTime.Now.ToShortDateString().Replace("-", "& ...
- asp.net 后台获取flv视频地址进行播放
源码下载:http://download.csdn.net/detail/njxiaogui/7609687 前台:.aspx <table> <tr> <td>& ...