2009-07-08 12 views
32

Tengo el siguiente bucle For en un archivo por lotes:Recibe el nombre de archivo por lotes para el bucle

for /R c:\test\src %%i IN (*.*) DO (
MOVE %%i C:\test\destination 
ECHO %%i 
exit 
) 

El resultado de la ECHO da salida a toda la ruta del archivo Ex: C: \ carpeta \ Nombre Nombre necesito para ECHO solo el Nombre de archivo. ¿Hay algún comando específico que me dé el nombre de archivo? Gracias!

+6

Por cierto, si está utilizando una versión de Windows hecho de este siglo, no es DOS que está utilizando, es el símbolo del sistema de Windows. – whatsisname

Respuesta

65

Cuando las Extensiones de comando están habilitadas (Windows XP y más reciente, más o menos), puede usar la sintaxis% ~ nF (donde F es la variable y ~ n es la solicitud de su nombre) para obtener el nombre del archivo.

FOR /R C:\Directory %F in (*.*) do echo %~nF 

debe repetir solo los nombres de los archivos.

+13

agrega% ~ xF al final si quieres ver la extensión del archivo también. – akf

+33

O% ~ nxf para obtener nombres de archivos con extensiones. – Helen

+0

IIRC, la mayoría de las extensiones han estado en CMD.EXE desde al menos NT 3.5, y algunas de ellas incluso estaban allí en las versiones beta de pregui beta de NT. El equipo de NT no vio ninguna razón para preservar todo el dolor de COMMAND.COM al construir una "nueva" versión de Windows. Sin embargo, parecían no haberse molestado en contarles al equipo de documentación durante mucho tiempo. – RBerteig

4

o Just% ~ F le dará la ruta completa y el nombre completo del archivo.

Por ejemplo, si desea registrar todos los archivos * .ax en el directorio actual ....

FOR /R C:. %F in (*.ax) do regsvr32 "%~F" 

Esto funciona bastante bien en Win7 (64 bits) :-)

3

soy un poco tarde pero utilicé esto:

dir /B *.* > dir_file.txt 

luego puede hacer un simple bucle FOR para extraer el nombre del archivo y usarlo. por ejemplo:

for /f "tokens=* delims= " %%a in (dir_file.txt) do (
gawk -f awk_script_file.awk %%a 
) 

o almacenarlos en Vars para su uso posterior (!!! N1 N2 !, .. Nn!). por ejemplo:

set /a N=0 
for /f "tokens=* delims= " %%a in (dir_file.txt) do (
set /a N+=1 
set v[!N!]=%%a 
) 
+0

gawk no está disponible en todas partes, aunque – Li3ro

0

Si desea permanecer tanto el nombre de archivo (sólo) y extensión, es posible utilizar %~nxF:

FOR /R C:\Directory %F in (*.*) do echo %~nxF
Cuestiones relacionadas