for /r %f in (*) do echo %f
Дает выходное имя файла вместе со всем путем
\path\to\dir\<filename>
Как мне получить только <filename>
без включенного пути? Мне нужно использовать эту строку имени файла.
Кроме того, возможно ли сделать следующее после получения имени файла?
for /r %%f in (*) do (
echo "blah blah blah 'filename'" >> blahblah_filename.txt
)
windows
command-line
script
batch
сойка
источник
источник
for
команде.Ответы:
Используйте
%~nxf
для<filename>.<extension>
.И да, вы можете сделать:
Смотрите
for /?
:источник
find
илиfindstr
, например,echo %%f | find "\.git\" > NUL
или,echo %%f | findstr /R /C:"\\\.git\\" /C:"\\\.git\>" > NUL
а затем проверив уровень ошибки с помощьюif
команды. (регулярное выражение findstr очень ограничено, так что это моя попытка применить начальный\
и [конечный\
или конец строки]). Обратите внимание, что в немif errorlevel
есть причуды с провалом, и вы, вероятно, не можетеif %errorlevel%
в цикле, поэтому вам может понадобитьсяSetLocal EnableDelayedExpansion
сначала, а затемif !errorlevel!
вместо этого.%~nxf
- это имя файла, как я сказал в первом предложении. Когда вы используете его в пакетном файле, вам нужно удвоить%
, делая это%%~nxf
. Этоblah blah blah
просто пример из вопроса и заменаfilename
бита на%%~nxf
подстановку -blah
они просто заполняют и не имеют особого значения.Я пока не могу комментировать, но считаю, что следует отметить следующее, чтобы избежать путаницы.
Хотя
f
его можно использовать в качестве имени переменной FOR, лучше использовать другую букву, чтобы не путать ее с форматной буквойf
(которая, как указано в ответе Боба, возвращает полное имя пути), или, по крайней мере, использовать заглавную буквуF
.источник