for /r %f in (*) do echo %f
Fornece o nome do arquivo de saída junto com o caminho inteiro
\path\to\dir\<filename>
Como obtenho apenas <filename>
o caminho sem o incluído? Eu preciso usar essa string 'filename'.
Além disso, é possível fazer o seguinte, depois que o nome do arquivo for adquirido?
for /r %%f in (*) do (
echo "blah blah blah 'filename'" >> blahblah_filename.txt
)
for
comando.Respostas:
Use
%~nxf
para<filename>.<extension>
.E sim, você pode fazer:
Veja
for /?
:fonte
find
oufindstr
, por exemplo,echo %%f | find "\.git\" > NUL
ouecho %%f | findstr /R /C:"\\\.git\\" /C:"\\\.git\>" > NUL
e, em seguida, verificando o nível de erro com oif
comando (o findex regex é muito limitado, então essa é minha tentativa de impor um líder\
e [um final\
ou final de string]). Observe queif errorlevel
há peculiaridades com o fall-through, e você provavelmente não pode fazerif %errorlevel%
um loop; portanto, primeiro é necessárioSetLocal EnableDelayedExpansion
primeiroif !errorlevel!
.%~nxf
é o nome do arquivo, como eu disse na primeira frase. Ao usá-lo em um arquivo em lotes, é necessário dobrar o número%
, tornando-o%%~nxf
. Issoblah blah blah
é apenas pegar o exemplo na pergunta e substituir ofilename
bit pela%%~nxf
substituição - osblah
s são apenas preenchedores e não têm significado específico.Ainda não sou capaz de comentar, mas acredito que o seguinte deve ser observado para evitar confusão.
Embora
f
possa ser usado como um nome de variável FOR, é melhor usar outra letra para evitar confundi-la com uma letra de formatof
(que, como indicado na resposta de Bob, retorna o nome completo do caminho) ou, pelo menos, use uma capitalF
.fonte