環境変数をカウンタとして使う

  VBScript + バッチファイルでコマンド化



add 0 で 環境変数 ADD を(無ければ)作成して、0で初期化します。
以降、add を実行すると、1づつカウントアップします。

他の環境変数を使いたい場合は、
add MYENV 0
add MYENV

というように実行します。引数を2つ指定する場合は、add MYENV n と言う指定が可能で、
n には任意の整数を指定します( 負の数 OK )

add.bat
  
@echo off
cscript.exe //NOLOGO "%~dp0add.vbs" %1 %2
  

add.vbs
  
Set WshShell = CreateObject("WScript.Shell")
Set WshSysEnv = WshShell.Environment("USER")

Dim work,vstr

if Wscript.Arguments.Count = 0 then
	work = WshSysEnv("ADD")
	if Trim( work ) = "" then
		WshSysEnv("ADD") = 0
	else
		WshSysEnv("ADD") = Cint(work)+1
	end if
	Wscript.Echo WshSysEnv("ADD")
	Wscript.Quit
end if

if Wscript.Arguments.Count = 1 then
	if Wscript.Arguments(0) = "0" then
		WshSysEnv("ADD") = 0
		Wscript.Echo WshSysEnv("ADD")
		Wscript.Quit
	else
		vstr = Wscript.Arguments(0)
		work = WshSysEnv(vstr)
		if Trim( work ) = "" then
			WshSysEnv(vstr) = 0
		else
			WshSysEnv(vstr) = Cint(work)+1
		end if
	end if
	Wscript.Echo WshSysEnv(vstr)
	Wscript.Quit
end if

if Wscript.Arguments.Count = 2 then
	vstr = Wscript.Arguments(0)
	if Wscript.Arguments(1) = "0" then
		WshSysEnv(vstr) = 0
		Wscript.Echo WshSysEnv(vstr)
		Wscript.Quit
	else
		work = WshSysEnv(vstr)
		if Trim( work ) = "" then
			WshSysEnv(vstr) = 0
		else
			WshSysEnv(vstr) = Cint(work)+Cint(Wscript.Arguments(1))
		end if
	end if
	Wscript.Echo WshSysEnv(vstr)
	Wscript.Quit
end if
  


add の表示を errorlevel にセットするサブルーチン

  
:count
for /f  %%i in ('call add') do (
	exit /b %%i
)
  

for コマンドを使って call add の標準出力を %%i にセットして、
そのまま、exit で、errorlevel として返します。


限定回数ループ処理を行うバッチファイル

  
@echo off

REM カウンタ用環境変数初期化
call add 0 > nul
REM ファイルの一覧( 引数で指定した数まで )
for %%i in ( *.* ) do (
	echo %%~fi
	call :count
	if errorlevel %1 ( goto end ) else ( echo off  )
)

REM バッチファイル終了
:end
envvar_remove ADD
exit /b

REM カウントアップしてその値を errerlevel で返す
:count
for /f  %%i in ('call add') do (
	exit /b %%i
)
  

*.* で、ファイルの一覧が対象( %%~fi なので、フルパス )ですが、
ループ毎に count サブルーチンを呼んで、現在のカウントを errorlevel にセットさせ、
if コマンドで、引数( %1 ) に指定した値と一致するとループを抜けて( goto end )、処理を終了させます。

最後に、envvar_remove で、USER 環境変数に作成された ADD を削除します。


envvar_remove.bat
  
@echo off
cscript.exe //NOLOGO "%~dp0envvar_remove.vbs" %1
  

envvar_remove.bat
  
Set WshShell = CreateObject("WScript.Shell")
Set WshSysEnv = WshShell.Environment("USER")

if Ucase(Wscript.Arguments(0)) = "PATH" then
	Wscript.Quit
end if
if Ucase(Wscript.Arguments(0)) = "TEMP" then
	Wscript.Quit
end if
if Ucase(Wscript.Arguments(0)) = "TMP" then
	Wscript.Quit
end if

WshSysEnv.Remove(Wscript.Arguments(0))
  


※ USER 環境変数で間違って削除されたく無い変数を PATH,TEMP,TMP としています










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ