Variável para obter caminho absoluto no script de lote do Windows

8

Eu tenho o seguinte script para listar todos os arquivos, recursivamente de um diretório, com uma extensão .phtml .

@echo off
setlocal
for /f %%G in ('forfiles /s /m *.phtml /c "cmd /c echo @relpath"') do echo %%G >> listoffiles.txt
endlocal
exit

Lista apenas o caminho relativo aos arquivos. O script acima está sendo executado em um local intermediário, portanto, não estou obtendo caminhos completos na variável @relpath .

Também estou recebendo cotações nas linhas de resultado, que desejo remover.

Eu quero obter o caminho absoluto para esses arquivos com algumas alterações de código, se uma variável global estiver disponível, que pode ser usada no meu código, então é melhor para mim, já que não sou muito do Windows.

    
por Vicky Dev 17.12.2015 / 18:14

1 resposta

2

Não estou obtendo caminhos completos na variável @relpath .

also I am getting quotes in the result lines, which I want to remove.

O arquivo de lote a seguir faz o que você deseja:

@echo off
setlocal enableDelayedExpansion
for /f %%G in ('forfiles /s /m *.phtml /c "cmd /c echo @path"') do (
  set _name=%%G
  rem strip the quotes
  echo !_name:~1,-1! >> listoffiles.txt
  )
endlocal
exit

Notas:

  • Usa @path (caminho completo do arquivo) em vez de @relpath (caminho relativo do arquivo).
  • Usa uma variável substring expression para remover as aspas ( :~1,-1 remove o primeiro e o último caractere da variável string).
  • Usa setlocal EnableDelayedExpansion para que as variáveis sejam atualizadas corretamente no loop for .

Leitura Adicional

por 17.12.2015 / 18:33