百度找不到,但高手都知道(感覺他們都知道)的一個小細節--BUG調試報告

来源:https://www.cnblogs.com/seafever/archive/2020/04/14/12695076.html
-Advertisement-
Play Games

語言 Batch 前言 以前我一直不明白為什麼那麼多應用程式在讀取“文件路徑”作為參數時為什麼總是在正式的“文件路徑”前要加上個“ f”、" d"、" file"以及“ path”之類的引導參數,以為只是純粹的裝帥,或者增加程式使用的代入感,亦或者是便於理解之類的。所以,我寫的程式中也常常會帶一些引 ...


語言 Batch

前言

以前我一直不明白為什麼那麼多應用程式在讀取“文件路徑”作為參數時為什麼總是在正式的“文件路徑”前要加上個“-f”、"-d"、"-file"以及“-path”之類的引導參數,以為只是純粹的裝帥,或者增加程式使用的代入感,亦或者是便於理解之類的。所以,我寫的程式中也常常會帶一些引導參數。

知道今天,我終於發現了這個小秘密...雖然觸發條件很苛刻(也不是很少見),但稍不留神就會遇到。然後,一分鐘過去了,一小時也過去了...無助的看著自己的項目,再看看網上一堆抄過來又抄過去的,甚至是抄爛了的文章、博客...哎~洗洗睡吧...

BUG 詳情

  1. 這是我寫的一個項目,作用是計算文件的 Hash 碼校驗文件。在這裡最重要的兩個參數,一個是文件路徑,一個是文件校驗的 Hash 碼類型

  2. 目前使用的是批處理作為引導傳遞參數,用於調試程式。

  3. 在批處理中,第一個參數用於讀取“文件路徑”,第二個參數用於讀取“Hash碼類型”。然後,由批註里將參數傳遞給程式用於計算 Hash 校驗碼。

  4. 使用命令如圖

很顯然,這個 “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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第一步:下載pdf.js 下載地址:https://www.jsdelivr.com/package/npm/pdfjs-dist 打開後找到pdf.js、pdf.work.js以及cmaps路徑下的全部文件,下載到本地或者直接引用其地址 實例代碼 //HTML <canvas id="the-ca ...
  • 生命周期: 用通俗的語言來說,就是Vue中實例或者組件從創建到消滅中間經過的一系列過程。 beforecreate : 一般使用場景是在加 loading事件 的時候created :處於loading結束後,還做一些初始化,實現函數自執行(data數據已經初始化,但是DOM結構渲染完成,組件沒有加 ...
  • 模擬根據登錄情況判斷要顯示的歡迎界面 import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; import * ...
  • 一.原生js判斷元素是否隱藏 1.通過offsetParent判斷,使用這種方法來判斷當前元素是否被隱藏,包括通過設置父元素為 以及自己本身為 的情況。但是如果是通過設置 則無法檢測出。 2.通過getComputedStyle方式判斷 "getComputedStyle使用參考" ~~~ func ...
  • 參考借鑒ABP中提供的擴展性 持續更新.... ==實現一:== 定義一個介面 定義一個實現,這個實現是要被另外的一個實現類代替的: 替代的實現類: 這裡的 介面 特性都是ABP中的。 ==實現二:== 介面定義: 預設實現類: 替換類: ==實現三:== 參考: "擴展與解耦:Option模式與依 ...
  • nstall both Python 2.7 and 3.4 with the windows installers. Go to C:\Python34 (the default install path) and change python.exe to python3.exe Edit you ...
  • 總結了常見的解決方式,如下 1、檢查xml文件的namespace是否對應介面,要是全路徑。 xml文件名不需要和介面名一致,namespace和介面全類名一致即可。 2、xml中的函數id和介面中的函數名是否對得上,參數類型、返回值類型是否對得上 3、去看輸出目錄中有沒有xml映射文件,maven ...
  • 同一行為,通過不同的事物,可以體現出來的不同的形態。多態描述的就是這樣的狀態。 定義:是指同一行為,具有多個不同表現形式。 多態的前提 1. 繼承或者實現【二選一】 2. 方法的重寫【意義體現:不重寫,無意義】 3. 父類引用指向子類對象【格式體現】 多態的體現 格式 父類類型 變數名 = new ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...