2017-04-14 59 views
3

最近我開始將行註釋爲double ::,但是我意識到它可以在很長的「for」或「選擇」腳本和「goto 「因爲它被描述爲What does :: (double colon) mean in DOS batch files?批處理設置REM作爲變量使代碼看起來不同

所以我想知道是否可以將變量設置爲REM並使用它?

我在一個小小的cmd腳本中看到過某處,並且真的很喜歡它,因爲它讓批處理代碼看起來更清晰。但我不知道它會不會造成任何問題?

@echo off 
Set #=REM 
%#% show date 
echo it's %date% 
%#% let's wait few seconds... 
ping 1.1.1.1 > nul 
echo and now it's %date% 
%#% whatever 
exit 

回答

3

這是沒有問題的,什麼都不是。

該變量實際上是一個宏,我經常使用該技術(儘管不適用於備註)。批解析器在對代碼邏輯進行任何解釋之前擴展變量中的代碼,因此它的功能與您希望的/期望的完全相同。

實際上有一個複雜的技術來創建帶參數的批處理宏。 http://www.dostips.com/forum/viewtopic.php?f=3&t=2518的帖子描述了最終的語法,http://www.dostips.com/forum/viewtopic.php?t=1827顯示了隨着時間的推移該技術的發展。

您使用%#%作爲REM宏是完全有效的,並且沒有任何「最佳」風格。但我更願意使用:: Comment來處理不在括號內的塊內的註釋,對於在括號內的塊內的註釋使用%= comment =%。最後一個語法就是一個未定義的變量,它被擴展爲無。在名稱中只有幾個動態僞變量包含=,並且任何批處理變量都不可能在名稱中包含兩個=。所以只要評論不包含:%,該技術就可以安全使用。

1

當我在批處理中寫入rem註釋時,我比當前代碼縮進多了一個空白。 由於我的代碼縮進是2個空格,所以對我來說如此可讀並且立即落入眼中。

... 
rem my comment 
... 

在使用echo on進行調試時,rem註釋很有幫助:行被讀到行尾。使用全部%variables%以及參數%1 ... %9 %*。 然而,這意味着,rem註釋中的循環內的所有變量只能在開始處解決 - 因爲命令rem在執行前顯示一次,但在執行期間保持沉默。

如果要在調試各種變量的圓括號內顯示這些變量,必須使用echo rem顯示這些變量。 對於這樣的調試,建議設置一個變量,以便在調試關閉的情況下,然後在調試echo rem時使用rem。

If defined debug (set "rem=echo rem") else set "rem=rem" 

對於其他的調試,從而事情不應該顯示我兩次使用變量%mon%。我用回聲來回應,並回應rem。

rem < :checkEchoOn 
:checkEchoOn 
:: Liest ob ECHO ON oder OFF geschalten ist um Variablen zu setzen 
:: VAR Mon = read ECHO ON/OFF ;set Echo(/ rem 
rem = :checkEchoOn 
@(
rem ^%Mon% Zeilen bei Echo on auf REM umschalten 
echo>"%temp%\isOn.Ft" 
< "%temp%\isOn.Ft" find "ON" >nul 
if not errorlevel 1 set "Mon=rem" 
if  errorlevel 1 set "Mon=echo(" 
del "%temp%\isOn.Ft" 
rem > END checkEchoOn 
if /i "%~0" equ ":CheckEchoOn" exit /b 
) 
%mon% this is a visible comment - only once 

戴夫已經寫入與2 doublecolon開始不循環括號內開始徵求意見。儘管如此,讓人們在循環包中做到這一點。 這些::註釋通常是對被調用的批處理或函數的解釋。

請注意,這些行完全讀入。 %Variable%和參數%1 ... %9 %*以及特殊字符被視爲要執行的行(請參閱Jebs聲明)。 獨自一人已經是仔細寫這些評論線的原因。 這些::註釋行可以寫成多行,這意味着在行末尾的(未屏蔽的)插入符號,下面的行被認爲是註釋的延續。因此,沒有雙重點的幾條連續註釋行是可能的。

%== loop commentaries %主要用於編碼概述。

我使用的另一種評論是if-loop評論。它們也用於調試,但僅用於一次鏡像功能。爲此,評論要麼從*開始,要麼評論就像這樣開始。 注意此註釋僅適用於該功能開始。如果條件在正常情況下使用右括號終止,則if條件終止。

... 
call :Sub1 

if :Sub == begin (* begin :Sub1 
    this will begin Sub1 
:Sub1 
    4> "test.txt" (
    >&4 echo this is a test 
) 
    exit /b 
if :Sub == END * END :Sub1) 

... 

例如,這也可用於版本變更的情況。

... 
if :new == begin * begin Version 2.1 
... new code 
if :new == END * END Version 2.1 
... 

查看它的最好方法是如何使它最注重評論以及它是否如此適用於您。 第二個方面是你也可以理解其他人的批量。以及您使用註釋爲您正確記錄您的代碼。它也適合你。