Variable para obtener la ruta absoluta en el script por lotes de Windows

9

Tengo el siguiente script para enumerar todos los archivos, recursivamente desde un directorio, que tiene una .phtmlextensión.

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

Enumera solo la ruta relativa a los archivos. El script anterior se ejecuta desde una ubicación intermedia, por lo que no obtengo rutas completas en @relpathvariable.

También recibo citas en las líneas de resultados, que quiero eliminar.

Quiero obtener una ruta absoluta a esos archivos con algunos cambios de código posibles, si hay una variable global disponible que pueda usarse en mi código, entonces es lo mejor para mí, ya que no soy mucho del scripter por lotes de Windows.

Vicky Dev
fuente

Respuestas:

3

No obtengo caminos completos en la @relpathvariable.

También recibo comillas en las líneas de resultados, que quiero eliminar.

El siguiente archivo por lotes hace lo que desea:

@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:

  • Utiliza @path( Ruta completa del archivo) en lugar de @relpath(Ruta relativa del archivo).
  • Utiliza una substringexpresión variable para eliminar las comillas ( :~1,-1elimina el primer y el último carácter de la cadena variable).
  • Se utiliza setlocal EnableDelayedExpansionpara que las variables se actualicen correctamente en el forbucle.

Otras lecturas

  • Un índice AZ de la línea de comando CMD de Windows : una excelente referencia para todo lo relacionado con la línea cmd de Windows.
  • enabledelayedexpansion : la expansión retrasada hará que las variables se expandan en el tiempo de ejecución en lugar de en el tiempo de análisis.
  • for / f : comando Loop contra los resultados de otro comando.
  • forfiles : seleccione un archivo (o conjunto de archivos) y ejecute un comando en cada archivo. Procesamiento por lotes.
  • Variables : extraer parte de una variable (subcadena).
DavidPostill
fuente