standard di stile di codifica di file batch Windows (.bat)

3

Esiste uno stile di codifica di file batch standard / incoraggiato di Windows?

Penserei che se voglio che i miei file batch siano facili da leggere / mantenere, dovrei preoccuparmi di questo, ma cercando nel web ho trovato molto poco a riguardo, e non ho ricevuto alcuna recensione (nemmeno commenti) su questo Domande sulla revisione del codice, quindi mi chiedo se questa è una cosa di cui non mi importa molto ...

    
posta carlossierra 24.08.2016 - 07:35
fonte

2 risposte

4
  • Naming, il file le variabili, le funzioni.
  • Commenti, cosa fa lo script, cosa fa quella porzione complicata di codice.
  • Isola la porzione di codice nelle funzioni
  • Coerenza nello stile di codifica, qualunque sia la tua scelta.

Questi sono ciò che rende il codice veramente manutenibile qualunque tipo di codice sia. Ora i batch dovrebbero essere un codice piuttosto corto e non così tanti file, quindi probabilmente è questo il motivo per cui non c'è molto sulla codifica standard e così via.

Se hai un sacco di lotti, una documentazione esterna che mostra come funzionano insieme sarebbe probabilmente necessaria.

Per essere onesti non sono abituato a fare il batch, quindi non capisco tutto sulla sintassi che usi nel post di revisione del tuo codice. Ma le tue opere mi sembrano abbastanza belle, forse la gente non ha commentato "non vedo niente di sbagliato qui".

    
risposta data 24.08.2016 - 08:40
fonte
1

Quando scrivo file batch, solitamente si basano sul seguente modello:

@title Optional Title
@echo off
setlocal EnableExtensions DisableDelayedExpansion

::Comment that describes purpose and usage of the script; this should also
::contain (original) script name, version, date and author, if applicable.

rem Define global constants (read-only variables) here (names begin with '_').

rem Initialise global variables (those accessed also by sub-routines) here,
rem if any (names begin with '$').

rem Parse command line arguments and/or user input data here;
rem regard cases when too few or too many arguments are provided;
rem regard cases when user input is empty.

rem Place code for processing here:
rem In general, avoid non-ASCII characters within functional code;
rem use lower-case (for commands, sub-commands, verbs and keywords);
rem use upper-case only for switches, variable names and 'for' references;
rem place single space between commands, switches and arguments;
rem place single spaces around redirection operators too;
rem avoid excessive line concatenation (by '&');
rem insert explanatory comments using the 'rem' command.
(
    rem Indent parenthesised blocks.
)

rem Return resulting output here.

endlocal
exit /B


:SUB  rtn_return  ref_variable  val_value
    setlocal DisableDelayedExpansion
    ::Comment that describes purpose and usage of the sub-routine;
    ::include the meanings of the aforementioned arguments (like:
    ::'rtn_*' denote return values, so they hold variable names;
    ::'ref_*' denote references, so they hold variable names too;
    ::'val_*' denote values, so they hold immediate values).

    rem Define local constants here (names begin with '_').

    rem Parse arguments here; check whether too few/many arguments are given;

    rem Place code for processing here.

    rem Return resulting output here; regard the 'endlocal' barrier
    rem (for 'rtn_*' arguments, whose values need to survive it).

    endlocal
    exit /B

Se un sistema di guida (supporto per /? switch) sta per essere implementato, solitamente utilizzo questo modello:

@title Optional Title
@echo off
setlocal EnableExtensions DisableDelayedExpansion

::Comment that describes purpose and usage of the script; this should also
::contain (original) script name, version, date and author, if applicable.

::::
::::"%~nx0"  [version 0.0]
::::
::::Help message text that describes the purpose of the script in detail;
::::some parts of that text may be placed elsewhere in the script.
::::The continued text could describe the exact usage of the script,
::::illustrating the syntax and listing all the accepted parameters.
::::

rem Define global constants (read-only variables) here (names begin with '_').

rem Initialise global variables (those accessed also by sub-routines) here,
rem if any (names begin with '$').

rem Parse command line arguments and/or user input data here;
rem regard cases when too few or too many arguments are provided;
rem regard cases when user input is empty.
if "%~1"=="/?" call :HLP & exit /B

rem Place code for processing here:
rem In general, avoid non-ASCII characters within functional code;
rem use lower-case (for commands, sub-commands, verbs and keywords);
rem use upper-case only for switches, variable names and 'for' references;
rem place single space between commands, switches and arguments;
rem place single spaces around redirection operators too;
rem avoid excessive line concatenation (by '&');
rem insert explanatory comments using the 'rem' command.
(
    rem Indent parenthesised blocks.
)

rem Return resulting output here.

endlocal
exit /B


:SUB  rtn_return  ref_variable  val_value
    setlocal DisableDelayedExpansion
    ::Comment that describes purpose and usage of the sub-routine;
    ::include the meanings of the aforementioned arguments (like:
    ::'rtn_*' denote return values, so they hold variable names;
    ::'ref_*' denote references, so they hold variable names too;
    ::'val_*' denote values, so they hold immediate values).

    rem Define local constants here (names begin with '_').

    rem Parse arguments here; check whether too few/many arguments are given;

    rem Place code for processing here.

    rem Return resulting output here; regard the 'endlocal' barrier
    rem (for 'rtn_*' arguments, whose values need to survive it).

    endlocal
    exit /B


:HLP
    setlocal DisableDelayedExpansion
    for /F "delims=" %%H in ('findstr /B /L "::::" "%~f0"') do (
        call set "LINE=%%H"
        setlocal EnableDelayedExpansion
        echo(!LINE:*::::=!
        endlocal
    )
    endlocal
    exit /B


::::
::::  USAGE:
::::
::::    %~nx0 [/optional] [/switch] {/alternative | /switches} parameter
::::
::::    /optional    optional switch
::::    /switch      optional switch
::::    /alternative alternative switch
::::    /switches    alternative switch
::::    parameter    required parameter
::::

Scopri tutti i commenti che contengono i consigli più importanti sullo stile di codifica.

    
risposta data 03.01.2017 - 23:44
fonte

Leggi altre domande sui tag