Переменная для получения абсолютного пути в пакетном скрипте Windows

9

У меня есть следующий скрипт, чтобы перечислить все файлы, рекурсивно из каталога, с .phtmlрасширением.

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

Он перечисляет только относительный путь к файлам. Приведенный выше скрипт выполняется из промежуточного местоположения, поэтому я не получаю полные пути в @relpathпеременной.

Также я получаю кавычки в строках результата, которые я хочу удалить.

Я хочу получить абсолютный путь к этим файлам с несколькими изменениями кода, насколько это возможно, если доступна глобальная переменная, которая может быть использована в моем коде, то это лучше для меня, так как я не очень люблю пакетный скрипт Windows.

Вики Дев
источник

Ответы:

3

Я не получаю полные пути в @relpathпеременной.

также я получаю кавычки в строках результата, которые я хочу удалить.

Следующий пакетный файл делает то, что вы хотите:

@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

Ноты:

  • Использует @path(Полный путь к файлу) вместо @relpath(Относительный путь к файлу).
  • Использует substringвыражение переменной для удаления кавычек ( :~1,-1удаляет первый и последний символы из строки переменной).
  • Используется setlocal EnableDelayedExpansionдля правильного обновления переменных в forцикле.

Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • enabledelayedexpansion - отложенное расширение приведет к тому, что переменные будут расширяться во время выполнения, а не во время разбора.
  • for / f - Циклическая команда против результатов другой команды.
  • forfiles - Выберите файл (или набор файлов) и выполните команду для каждого файла. Пакетная обработка.
  • переменные - извлечение части переменной (подстроки).
ДэвидПостилл
источник