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

9

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

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

Ele lista apenas o caminho relativo dos arquivos. O script acima está sendo executado em um local intermediário, portanto, não estou obtendo caminhos completos na @relpathvariável.

Também estou recebendo aspas nas linhas de resultado, que desejo remover.

Desejo obter o caminho absoluto para esses arquivos com o menor número possível de alterações de código, se houver uma variável global disponível que possa ser usada no meu código, será melhor para mim, pois não sou muito fã de scripts em lote do Windows.

Vicky Dev
fonte

Respostas:

3

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

também estou recebendo aspas nas linhas de resultado, que quero remover.

O seguinte arquivo em lotes 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 substringexpressão variável para remover as aspas ( :~1,-1remove o primeiro e o último caracteres da cadeia de caracteres variável).
  • Usa setlocal EnableDelayedExpansionpara que as variáveis ​​sejam atualizadas corretamente no forloop.

Leitura adicional

  • Um índice AZ da linha de comando do Windows CMD - uma excelente referência para todos os itens relacionados à linha de cmd do Windows.
  • enabledelayedexpansion - A expansão atrasada fará com que as variáveis ​​sejam expandidas no tempo de execução e não no tempo de análise.
  • for / f - comando de loop em relação aos resultados de outro comando.
  • forfiles - selecione um arquivo (ou conjunto de arquivos) e execute um comando em cada arquivo. Processamento em lote.
  • variáveis - Extrai parte de uma variável (substring).
DavidPostill
fonte