百度找不到,但高手都知道(感觉他们都知道)的一个小细节--BUG调试报告
语言 Batch
前言
以前我一直不明白为什么那么多应用程序在读取“文件路径”作为参数时为什么总是在正式的“文件路径”前要加上个“-f”、"-d"、"-file"以及“-path”之类的引导参数,以为只是纯粹的装帅,或者增加程序使用的代入感,亦或者是便于理解之类的。所以,我写的程序中也常常会带一些引导参数。
知道今天,我终于发现了这个小秘密...虽然触发条件很苛刻(也不是很少见),但稍不留神就会遇到。然后,一分钟过去了,一小时也过去了...无助的看着自己的项目,再看看网上一堆抄过来又抄过去的,甚至是抄烂了的文章、博客...哎~洗洗睡吧...
BUG 详情
这是我写的一个项目,作用是计算文件的 Hash 码校验文件。在这里最重要的两个参数,一个是文件路径,一个是文件校验的 Hash 码类型。
目前使用的是批处理作为引导传递参数,用于调试程序。
在批处理中,第一个参数用于读取“文件路径”,第二个参数用于读取“Hash码类型”。然后,由批注里将参数传递给程序用于计算 Hash 校验码。
使用命令如图:
很显然,这个 “A TEST” 文件夹中间存在空格,不好处理。
因为通常在参数中加上了双引号后基本不用考虑这个空格的出现,但奇怪的BUG就这么出现了...
这是执行结果:
???
显然,中间的空格还是被当作参数的 分隔符 看待了,从而导致“文件路径”参数只传递了一半,另一半被当作“Hash码类型”处理返回了这样的错误信息。
这个问题我也查了一下,的确由很少一部分人也遇到了。但几乎都没有一个确切的解决办法和问题原因的解释,这让人很难受。
我加过各种符号,几乎都没有起作用。
我想了想为什么以前没有遇到过这个问题?
最后,我把 %1 %2 这两个参数的读取调换了个位置--解释一下
{
原:
%1 --- 文件路径
%2 --- Hash码类型
现:
%1 --- Hash码类型
%2 --- Hash码类型
}
然后就....
然后就解决了,是的,解决了...
经过反复确认,最后得到一条结论:
在传递参数时,第一个参数最好不要传递“文件路径”之类的可能包含空格的参数。不然,中间出现 空格 的话,无论你是否添加双引号都会被分割成两个参数。
当然,这也时经验之谈。就像古代的农夫种庄稼一样,虽然不是什么惊世伟学,但有时候他就是那么“灵”。
底层的原理我还不明白,网上有的人说是跟操作系统有关(我感觉是瞎掰...)。也不知大前辈们是否都知道这个问题才使用引导参数的,还是向我之前一样...亦或者根本没有这个BUG,只是我遇到了这个奇怪的情况...谁知道呢?Who knows?
当然如果你清楚原理的话,还望能不吝赐教!在下在这先谢过了...<( _ _ )>
结论
Batch 中第一个参数最好不要设置为可能包含空格符的参数。因为在 CMD 按程序名称调用时含空格的第一个参数无论是否使用双引号包裹还是会被当成两个看待。
原创说明
原文作者:SeaFever
转载请务必注明出处!我本人保留所有权利!
原文链接:https://www.cnblogs.com/seafever/p/12695076.html
百度找不到,但高手都知道(感觉他们都知道)的一个小细节--BUG调试报告的更多相关文章
- 腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经纬度的问题 try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后? js获取某个日期
腾讯云图片鉴黄集成到C# 官方文档:https://cloud.tencent.com/document/product/641/12422 请求官方API及签名的生成代码如下: public c ...
- 有趣 GIF 动图集 - 仿佛每张小动图都诉说了一个小笑话或者小故事
点这里 来自法国南特(Nantes)的 Guillaume Kurkdjian 目前还是个学生.Kurkdjian 擅长创作一些平面动态图像,这些有趣的小动图仿佛每张都诉说了一个小笑话或者小故事,像个 ...
- 找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数 #include<iostream>using namespace s ...
- Sass 基本特性-运算 感觉满满都是坑
Sass中的基本运算 一.加法 在 CSS 中能做运算的,到目前为止仅有 calc() 函数可行.但在 Sass 中,运算只是其基本特性之一. sass做加法运算是可以不考虑参数带单位,但需 ...
- 插入函数概念 接收一个callback,然后外面函数,接一个对象,和一个next,外面都执行完了,继续执行下一个函数,相当于一个链状体,插入了一个函数的概念 | log4js 输出 等于 console.info
插入函数概念 接收一个callback,然后外面函数,接一个对象,和一个next,外面都执行完了,继续执行下一个函数,相当于一个链状体,插入了一个函数的概念 app.use(function (ctx ...
- 公众号和app和web都是客户端,都可以对接一个后台
1.公众号和app和web都是客户端,都可以对接一个后台 2.域名中包含端口号吗?:不包括,不包括 3.目前在IIS服务器上搭建了一个网站,域名也申请了,可是80端口不能使用,可以使用8000,每次访 ...
- 个人永久性免费-Excel催化剂功能第35波-Excel版最全单位换算,从此不用到处百度找答案
全球化的今天,相信我们经常可以有机会接触到外国的产品,同时我们也有许多产品出口到外国,国与国之间的度量单位不一,经常需要做一些转换运算,一般网页提供这样的转换,但没有什么比在Excel上计算来得更为方 ...
- 不用再去找rem了,你想要的rem都在这
一.兼容性. 目前,IE9+,Firefox.Chrome.Safari.Opera 的主流版本都支持了rem(大胆用吧,目前几乎所有手机浏览器都支持rem) 二.什么是rem. rem是相对于根元素 ...
- IHttpModule接口事件执行 获取Session 找了很多国内的都不对,从国外转过来一个测试可用的
我的环境,asp.net4.0框架集 不多说上代码 public class MyHttpModule : IHttpModule { public void Init(HttpApplication ...
随机推荐
- video 在iphone手机的ios系统和微信端无法自动播放
描述:video 在iphone手机,微信端无法自动播放,ios系统下不能自动播放视频.而且如果没有autoplay属性,在微信端点击一次,弹不出视频,要一直触着两秒后才可以打开视频.如果点击播放的话 ...
- 032.核心组件-kube-proxy
一 kube-proxy原理 1.1 kube-proxy概述 Kubernetes为了支持集群的水平扩展.高可用性,抽象出了Service的概念.Service是对一组Pod的抽象,它会根据访问策略 ...
- el-dialog对话弹框中根据后台数据无限制添加el-select标签,并进行展示,搜索,删除
前几天遇到一个题,el-dialog对话弹框中根据后台数据无限制添加el-select标签,并进行展示,搜索,删除,在这上面用到了递归算法,废话不多说,直接上代码 <template> & ...
- JavaScript隐式类型转换(详解 +,-,*,/,==)
JavaScript 在 运算 或 比较 之前, 会自动进行隐式类型转换. 下面我们来仔细讲一讲 + - * / == 运算符经历了哪些过程. 类型转换 ECMAScript 运行时系统会在需要时从事 ...
- orale中pl/sql的数据类型总结
一.pl/sql的概念 pl/sql简单的说就是:sql语句+编程语言的特性. 二.pl/sql的优点 1.可以提高程序的运行效率,因为能够减少数据库的访问次数. 2.可以对复杂的业务逻辑进行封装 3 ...
- Webpack中SplitChunksPlugin 配置参数详解
代码分割本身和 webpack 没有什么关系,但是由于使用 webpack 可以非常轻松地实现代码分割,所以提到代码分割首先就会想到使用 webopack 实现. 在 webpack 中是使用 Spl ...
- Natas3 Writeup(爬虫协议robots.txt)
Natas3: 页面提示本页面什么都没有. 在源码中发现提示:无信息泄露,谷歌这次不会发现它.提到了搜索引擎,猜测爬虫协议robots.txt中存在信息泄露,访问网站爬虫协议http://natas3 ...
- SpringMVC框架——常用注解
@RequestMapping Spring MVC 通过 @RequestMapping 注解将请求与业务方法进行映射,在方法定义处,在类定义都可以添加该注解. 常用参数: 1.value:指定请求 ...
- The instance of entity type 'manager' cannot be tracked because another instance with the same key value for {'id'} is already being tracked. When attaching existing entities, ensure that only one ent
最近在用ASP.NET CORE时遇到一些问题,现记录下: 出现上述错误,即在更新实体数据时出现的错误 services.AddDbContext<StoreContext>(c => ...
- Linux篇001——打开vi默认显示行号
$ vi ~/.vimrc 新增一行命令 :set number 保存退出,source ~/.vimrc