web-dev-qa-db-ja.com

Windowsバッチファイル(.bat)コーディングスタイル標準

標準/推奨Windowsバッチファイルコーディングスタイルはありますか?

バッチファイルを読みやすく/管理しやすくしたい場合は、これに注意する必要があると思いますが、見つかったWebを検索する 非常に小さい それについてレビューしませんでした。 (コメントすらありません) this コードレビューの質問なので、これは私があまり気にする必要がないものかどうか疑問に思います...

4
carlossierra
  • 命名、ファイル、変数、関数。
  • コメント、スクリプトの機能、コードの複雑な部分の機能。
  • 関数のコードの一部を分離する
  • コーディングスタイルの一貫性。

これらは、どんな種類のコードであっても、コードを実際に保守可能にするものです。現在、バッチは非常に短いコードであり、ファイルはそれほど多くないはずです。そのため、コーディング標準などについてそれほど多くはないのでしょう。

本当に多くのバッチがある場合、おそらくそれらがどのように連携するかを示す外部のドキュメントが必要になるでしょう。

正直に言うと、バッチ処理に慣れていないので、コードレビューの投稿で使用する構文についてすべてを理解しているわけではありません。しかし、あなたの作品は私にはかなりいいように見えます。おそらく、「ここでは何も問題はありません」と人々がコメントしなかっただけかもしれません。

4
Walfrat

私がバッチファイルを書いているとき、それらは通常次のテンプレートに依存しています:

@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

ヘルプシステム(/?スイッチのサポート)を実装しようとしている場合、通常は次のテンプレートを使用します。

@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
::::

最も重要なコーディングスタイルの推奨事項を含むすべてのコメントを確認してください。

2
aschipfl