PATHを1行ずつ表示する

環境変数PATHの内容を1項目1行で表示する。 その際に、C:\Program Filesで始まる物は表示しない。

単に改行するだけなら、文字列置換で簡単。改行に置換する際には、遅延環境変数にする事が必要。

C:\Program Filesの除外は、findstr /vで出来れば良いが、置換後の出力をパイプに繋ぐと1行目しか取り出せない。 しょうがないので、ループを回して、先頭から1項目ずつ取り除いていくことにした。 普通に置換すると、複数ある場合に全部置換してしまうので、先頭のみ置換するように先頭に文字を追加する。

@echo off
setlocal enabledelayedexpansion
if /i "%1" == "-a" goto ALL

set P=!PATH!
:LOOP
if "!P!"=="" exit /b
for /f "delims=;" %%A in ('echo !P!') do (
  echo %%A|findstr /i /c:"C:\PROGRAM FILES" >NUL
  if ERRORLEVEL 1 echo %%A
  set P=:!P!
  set P=!P::%%A;=!
  set P=!P::%%A=!
)
goto LOOP

:ALL
echo !PATH:;=^

!