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
for
comando.Respuestas:
Usar
%~nxf
para<filename>.<extension>
.Y sí, puedes hacer:
Ver
for /?
:fuente
find
ofindstr
, por ejemplo,echo %%f | find "\.git\" > NUL
oecho %%f | findstr /R /C:"\\\.git\\" /C:"\\\.git\>" > NUL
y luego verificando el nivel de error con elif
comando. (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 errorlevel
tiene peculiaridades con la caída, y probablemente no puedaif %errorlevel%
dentro de un bucle, por lo que es posible queSetLocal EnableDelayedExpansion
primero necesite y luego en suif !errorlevel!
lugar.%~nxf
es 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 blah
solo está tomando el ejemplo en la pregunta y reemplazando elfilename
bit con la%%~nxf
sustitución: losblah
s 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
f
se 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