Procurando uma solução para imprimir pathes dentro da path
variável na linha de comando do Windows, cheguei a esta solução. a resposta é este comando:
echo %path:;=&echo.%
agora eu me pergunto como isso funciona.
windows
command-line
yekanchi
fonte
fonte
echo.
pode não funcionar .Respostas:
Essa é uma solução interessante que eu nunca vi antes. Deixe-me tentar explicar:
echo %path%
. Isso imprimirá todos os diretórios em uma única linha separada por ponto e vírgula (;
)%path:a=b%
que substituirá todos osa
caracteres porb
echo.
é usado para imprimir uma nova linha&
é usado para separar comandos, por exemploecho line1&echo line2
, imprimirá duas linhas;
por nada e , em seguida , imprimir uma nova linha'. Não consigo encontrar nenhuma documentação sobre isso, então é apenas minha interpretação. Francamente, eu nem sabia que isso era possível, mas lá vai você. ATUALIZAÇÃO Minha interpretação desta etapa parece estar errada e é melhor explicada por wizzwizz4 .fonte
echo path
? %% são usados para variáveis?set greeting=Hello
e entãoecho %greeting%
. De maneira confusa,PATH
passa a ser um comando e uma variável, portanto, digitando o comandopath
, ouecho %path%
terá o mesmo resultado.$PATH
por exemplo.echo.
não é "o comando para imprimir uma nova linha". Este é o interpretador de comandos da Microsoft para Windows NTcmd
; e oecho.
é simplesmente o comando para imprimir um elemento do caminho, garantindo que, se o elemento do caminho estiver vazio, ele não mude para a outra funcionalidade deecho
. O primeiro tambémecho
deve ser umecho.
.Isso está usando a substituição de variável da linha de comando.
%path:;=&echo.%
significa "%path%
, mas substitua todos os;
s por&echo.
". Isso significa que, comset path=C:\Windows\System32;C:\Windows\;;C:\Python37;
:torna-se:
Como
&
é um separador de comandos, isso é equivalente a:Devido a peculiaridades do lote do DOS,
echo.
é idêntico,echo
exceto quando não há nada depois. Se for esse o caso, ele simplesmente imprime nada, em vez de dizer seECHO
está ativado ou desativado. Isso fará com que a saída:Realmente, deve-se
echo.%path:;=&echo.%
considerar o caso em que%PATH%
começa com a;
, mas esse comando é bastante inteligente de qualquer maneira.Entrando em detalhes detalhados, realmente
echo(
deve ser usado em vez deecho.
. Isso ocorre porqueecho.
pode haver problemas quando você tem um arquivo chamadoecho
e é lento porque ele precisa verificar o disco (%CD%
e acho que todos%PATH%
) toda vez que ele é executado. (Eu não tenho uma cópia do Windows, portanto não posso verificá-la; é apenas%CD%
ou em qualquer lugar%PATH%
que a presença doecho
arquivo afetaráecho.
e o que ele faz?)fonte
echo)
, mas não me lembro. ;-(echo.
é o que as pessoas costumavam circular mais, anos atrás. É o único em muitos livros. Eficiência não é o problema. É um comportamento maluco quando existem vários arquivos. Quando escrevi uma substituição de 32 bits para os 16 bitscmd
no OS / 2, a quebra de nomes de comandos nesses caracteres de pontuação e esse comportamento de análise altamente irregular são uma das coisas que eu não dupliquei deliberadamente e que coloquei no documento lista de diferenças. Emechodot
vez disso, criei um comando externo , que poderia ser alternativo,echo.
conforme desejado.echo(
é a única versão segura.