Pergunta

o arquivo de lote:

@echo.
@set curdrive=%~d0
@path | %curdrive%\utils\sed -e "s/PATH=//" | %curdrive%\utils\tr ; \n
@echo.

Exemplo de saída (um elemento caminho em cada linha):

C:\cheeso\bin
C:\Perl\bin
c:\utils
C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
c:\Program Files\Microsoft SQL Server\90\Tools\binn\
c:\.net3.5
c:\.net2.0
c:\vs2008\common7\IDE
c:\netsdk2.0\bin

Este arquivo de lote depende da sed.exe eo tr.exe de UnxUtils . Eu gostaria de fazer a mesma coisa usando apenas built-in comandos e programas que estão incluídos no Windows. Posso fazer isso? Sugestões?

Foi útil?

Solução

setlocal
SET _Path="%Path:;=";"%"
FOR %%a IN (%_Path%) DO ECHO     %%~a
endlocal

Outras dicas

Atenção, abuso de recursão frente:

@echo off

call :one "%PATH%"
goto :eof

:one
for /f "tokens=1,* delims=;" %%i in (%1) do (
    echo %%i
    if not "%%j"=="" call :one "%%j"
)

Aqui está uma versão não-recursiva. Não é realmente melhor, mas eu senti como procurar uma outra solução:

SETLOCAL ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
:again
FOR /F "delims=;" %%I IN ("%PATH%") DO ECHO %%I & SET PATH=!PATH:%%I;=!
IF DEFINED PATH GOTO :again
ENDLOCAL

Eu acredito que isso só funcionará para o Windows XP, 2003 Server, e mais recente.

Eu tentei isso no meu servidor Windows 2003 e funcionou. Aqui está o conteúdo do meu showpath.cmd:

@echo off
for %%p in (%PATH%) do echo %%p

Eu comecei a usar este:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
set tpath=%path%;
echo.
:again
FOR /F "delims=;" %%I IN ("%TPATH%") DO (
  echo    %%I 
  set TPATH=!TPATH:%%I;=!
)
IF DEFINED TPATH GOTO :again

ENDLOCAL

Mas, então, decidiu este era mais simples:

setlocal
set _path="%PATH:;=" "%"
for %%p in (%_path%) do if not "%%~p"=="" echo     %%~p
endlocal
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top