百度找不到,但高手都知道(感觉他们都知道)的一个小细节--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 ...
随机推荐
- java原子操作CAS
本次内容主要讲原子操作的概念.原子操作的实现方式.CAS的使用.原理.3大问题及其解决方案,最后还讲到了JDK中经常使用到的原子操作类. 1.什么是原子操作? 所谓原子操作是指不会被线程调度机制打断的 ...
- Python 【绘制图及turtle库的使用】
前言 最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,整理了一下,挑了一些觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~赶快去试一下吧) one ...
- app之---豆果美食
1.抓包 2.代码 抓取: #!/usr/bin/env python # -*- coding: utf-8 -*- #author tom import requests from multipr ...
- Python基础篇_实例练习1
1.逢7跳过小游戏:从1-100之间,遇到带7的数字或者7的倍数跳过. for i in range(1,101): if i == 7 or i % 10 == 7 or i // 10 == 7: ...
- 利用JDBC工具类添加和查询数据-Java(新手)
JDBC工具类: 1 package cn.lxr.jdbclx; 2 3 import java.sql.*; 4 5 public class JDBCUtils { 6 private stat ...
- 数据结构和算法:Python实现二分查找(Binary_search)
在一个列表当中我们可以进行线性查找也可以进行二分查找,即通过不同的方法找到我们想要的数字,线性查找即按照数字从列表里一个一个从左向右查找,找到之后程序停下.而二分查找的效率往往会比线性查找更高. 一. ...
- jvm 性能调优工具之 jps 命令详解
JPS名称:jps - Java Virtual Machine Process Status Tool命令用法:jps [options] [hostid] options:命令选项,用来对输出格式 ...
- SpringMVC框架——视图解析
SpringMVC视图解析,就是将业务数据绑定给JSP域对象,并在客户端进行显示. 域对象: pageContext.request.session.application 业务数据绑定是有ViewR ...
- VSCode 配置C++开发环境
目录 安装VSCode应用程序 安装相关插件 汉化插件 C++编辑器插件 编写配置文件 tasks.json launch.json c_cpp_properties.json 第一步.安装VSCod ...
- adt-bundle环境搭建(Win7+Win10)
一.adt-bundle安装包 安装包的下载地址:http://tools.android-studio.org/index.php/adt-bundle-plugin 链接中包含有windows. ...