Команда forfiles
обеспечивает возможность ходить по дереву каталогов рекурсивно, каждая итерация возвращает путь относительно данного корневого каталога при использовании его переменной @relpath
(каждый элемент с префиксом .\
, и, к сожалению, в двойных кавычках):Как пройти через дерево каталогов, возвращающее относительные пути без использования `forfiles`?
forfiles /S /P "D:\data" /S /M "*" /C "cmd /C echo @relpath"
Есть ли способ сделать именно это без forfiles
(но без окружающих котировок предпочтительнее)?
На самом деле я хочу избежать какой-либо самокодируемой сборки или перестроить относительный путь, если это возможно.
Следующие строки и обеспечивают абсолютные пути только (даже добавление \
или \.
к корневому пути или предваряя маску с .\
ничего не меняет):
for /R "D:\Data" %L in ("*.*") do echo %L
cd /D "D:\Data" & for /R "." %L in ("*.*") do echo %L
разборе Также выход dir /S /B "D:\Data"
с разрешением for /F
не делает то, что я хочу, потому что dir
возвращает абсолютные пути, как только переключается переключатель /S
.
Это специфично для Windows/партии? – kjprice
Да, это связано с Windows (я добавлю тег); это не обязательно связано с пакетом, так как вы можете выполнять все команды непосредственно в интерпретаторе командной строки (это то, что я сделал, см. синтаксис 'for''% L', который должен читать '%% L', если он используется в пакете); – aschipfl