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