編集済み - コメントの修正に合わせて調整するには (そして、ジェブも防弾もありません。足を撃たないようにしてください)
完了するために、このバッチは、まだ含まれていない場合にのみ、指定された変数に 1 つ以上の要素を追加します。
@echo off
call :addToVariable %*
exit /b
:addToVariable
rem %1 = variable name where to add elements
rem %2 = element to add
rem %3-... the rest of the elements. Will be shifted to retrieve
rem if no data, no work
if "%~1"=="" goto :EOF
if "%~2"=="" goto :EOF
rem prepare environment to work
setlocal enableextensions enabledelayedexpansion
rem get variable name to work
set "_var=%~1"
rem get original value of variable
if defined %_var% (
set "_value=!%_var%:"=!"
rem " this line does nothing but correct sintax highlighting
) else (
set _value=
)
rem skip to arguments with elements to include
shift
rem list of elements to add to original variable
set _add=
:addToVariableLoop
rem iterate over parameters
for %%d in ( %1 ) do (
rem test if new directory already in original or temporary variable
echo ";!_value!;!_add!;" | findstr /i /c:";%%~d;" >nul 2>nul
rem if not in variable, add to temporary variable
if not errorlevel 1 (
echo [%%~d] already included
) else (
echo adding [%%~d]
set "_add=!_add!;%%~d"
)
)
rem check if more elements are pending in call
if not "%~2"=="" (
shift
goto :addToVariableLoop
)
set "_value=%_value%%_add%"
endlocal & set "%_var%=%_value%"
goto :EOF
バッチ ファイルがpathAdd.cmd
の場合、パス変数に追加するには、次のように呼び出します。
pathAdd path c:\windows;c:\test;"c:\something more"
classPath 変数呼び出しに追加するには
pathAdd classPath c:\windows\system32\drivers
PSModulePath 変数呼び出しに追加するには
pathAdd PSModulePath "c:\Somewhere over the rainbow";c:\Users
....