8

У меня есть следующий скрипт, чтобы перечислить все файлы, рекурсивно из каталога, с расширением .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.

1 ответ1

2

Я не получаю полные пути в переменной @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 - выберите файл (или набор файлов) и выполните команду для каждого файла. Пакетная обработка.
  • переменные - извлечение части переменной (подстроки).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .