Escreva a variável de várias linhas para .txt (CMD, NO .bat)

4

Estou conseguindo dividir %PATH% em várias linhas como esta

set t=%PATH:;=^&echo.%

do que isso, exibe cada caminho em uma nova linha, exatamente como eu quero:

echo %t%

No entanto, quando eu quero escrever variável em um arquivo

echo %t% >paths.txt

apenas a última linha é gravada no arquivo.

O que estou fazendo de errado?

Atualizar

O comando set t=%PATH:;=^&echo.% não substitui os caracteres ; por quebras de linha (como foi dito), mas o reimplanta com o comando &echo.‌​ que é executado posteriormente.

    
por Paweł Audionysos 24.03.2017 / 16:17

2 respostas

4

O que estou fazendo errado?

Você precisa envolver o último echo com ( e )

(echo %t%) > paths.txt

Arquivo em lote corrigido (test.cmd):

@echo off
setlocal
set t=%PATH:;=^&echo.%
echo %t%
(echo %t%) > paths.txt
:endendlocal

Exemplo de uso:

> test
C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
C:\Windows\System32\WindowsPowerShell\v1.0\
C:\apps\WSCC\Sysinternals Suite
C:\apps\WSCC\NirSoft Utilities
C:\apps\Calibre\
C:\apps\Git\cmd
C:\apps\Git\mingw64\bin
C:\apps\Git\usr\bin
C:\apps\nodejs\
C:\Users\DavidPostill\AppData\Roaming\npm
> type paths.txt
C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
C:\Windows\System32\WindowsPowerShell\v1.0\
C:\apps\WSCC\Sysinternals Suite
C:\apps\WSCC\NirSoft Utilities
C:\apps\Calibre\
C:\apps\Git\cmd
C:\apps\Git\mingw64\bin
C:\apps\Git\usr\bin
C:\apps\nodejs\
C:\Users\DavidPostill\AppData\Roaming\npm

Uma solução mais simples

Esta solução não requer nenhum parênteses no caminho a ser escapado.

test.cmd:

@echo off
setlocal
for %%i in ("%path:;=";"%") do (
  echo %%~i >> paths.txt
)
:endendlocal

E na linha de comando:

for %i in ("%path:;=";"%") do echo %~i >> paths.txt

Leitura Adicional

por 24.03.2017 / 17:15
0

Seu t não deve armazenar caracteres de controle especiais como parte do caminho, como " , & , | , % e assim por diante. Se sim, então você pode simplesmente substituir o caractere ) final que tem interferência com o analisador:

(echo %t:)=^)%) > a

    
por 08.02.2018 / 16:51