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我常用 ...
随机推荐
- [JS12] 统计访问次数
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- Linux:环境变量
环境变量 变量 变量定义:declare tmp,declare是可选的. 变量赋值:tmp=1,=号左右不要有空格. 变量引用:echo $tmp,不要忘记了$号. 环境变量 简单理解了变量的概念, ...
- 如何带领一个Android开发团队
1)重构,夜未眠 将框架从业务中剥离 如何提高开发效率 如何提高程序性能 单元测试 技术调研 代码版本管理 2)渠道包管理 自动打包工具 批量打渠道包的两种解决方案 定制渠道包的流程管理 3)稳定性, ...
- paip.spring 获取bean getBean 没有beanid的情况下
paip.spring 获取bean getBean 没有beanid的情况下 spring能自动扫描带有注解的bean文件.. 作者Attilax 艾龙, EMAIL:1466519819@q ...
- MYSQL子查询与连接
37:子查询与连接SET 列名 gbk;//改变客户端数据表的编码类型. 子查询子查询(Subquery)是指出现在其他SQL语句内的SELECT子句例如SELECT * FROM t1 WHERE ...
- lamper技能树
- MF-800U
MF-800U 价格:200元左右 https://item.taobao.com/item.htm?spm=a230r.1.14.6.kfkqoY&id=4963072384&ns= ...
- SQL Server 2008 删除数据库帐号失败问题
SQL Server 2008 中单独为一个项目建立了一个账号zdhsa,结果发现无法删除. 问题:删除zdhsa失败. 解决:首先从"安全性"-"架构"中删除 ...
- 通过weburl 启动windows程序
1. 注册表修改 建立一个reg文件 执行导入 以RunLocal协议为例子 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\RunL ...
- Category和Extension
转: http://blog.csdn.net/leikezhu1981/article/details/19091049 一.概述 类别是一种为现有的类添加新方法的方式. 利用Objective-C ...