for /r %f in (*) do echo %f
Da el nombre del archivo de salida junto con la ruta completa
\path\to\dir\<filename>
¿Cómo obtengo solo el <filename>sin la ruta incluida? Necesito usar esa cadena de 'nombre de archivo'.
Además, ¿es posible hacer lo siguiente una vez que se adquiere el nombre de archivo?
for /r %%f in (*) do (
echo "blah blah blah 'filename'" >> blahblah_filename.txt
)
windows
command-line
script
batch
Arrendajo
fuente
fuente

forcomando.Respuestas:
Usar
%~nxfpara<filename>.<extension>.Y sí, puedes hacer:
Ver
for /?:fuente
findofindstr, por ejemplo,echo %%f | find "\.git\" > NULoecho %%f | findstr /R /C:"\\\.git\\" /C:"\\\.git\>" > NULy luego verificando el nivel de error con elifcomando. (findtr regex es muy limitado, así que ese es mi intento de forzar un inicio\y un final\o una secuencia). Tenga en cuenta queif errorleveltiene peculiaridades con la caída, y probablemente no puedaif %errorlevel%dentro de un bucle, por lo que es posible queSetLocal EnableDelayedExpansionprimero necesite y luego en suif !errorlevel!lugar.%~nxfes el nombre del archivo, como dije en la primera oración. Cuando lo usa dentro de un archivo por lotes, debe duplicar el%, haciéndolo%%~nxf. Elblah blah blahsolo está tomando el ejemplo en la pregunta y reemplazando elfilenamebit con la%%~nxfsustitución: losblahs son solo de relleno y no tienen un significado particular.Todavía no puedo comentar, pero creo que se debe tener en cuenta lo siguiente para evitar confusiones.
Si bien
fse puede usar como un nombre de variable FOR, es mejor usar otra letra para evitar confundirlo con el formato de letraf(que, como se indica en la respuesta de Bob, devuelve el nombre completo de la ruta), o al menos usar una mayúsculaF.fuente