2009-01-18 22 views
8

Actualmente estoy buscando una forma de tomar una variable en lote y analizar el nombre del archivo.En lote: lea solo el nombre de archivo de una variable con ruta y nombre de archivo

Por ejemplo, paso mi archivo de proceso por lotes un parámetro -s de otra aplicación que posteriormente se establece en mi variable de origen. La variable del archivo de origen normalmente contiene algo como: C: \ Archivos de programa \ miapp \ Instance.1 \ Data \ filetomove.ext.

Supongo que leeré desde el final de la variable hasta la primera "\" y estableceré el resultado en una nueva variable de nombre de archivo, pero no he podido utilizar el comando "for/f" con éxito.

¡Cualquier ayuda sería muy apreciada!

Actualización: Solo está disponible XP estándar o Windows 2000/2003 ... (no se puede asumir kits de recursos instalados).

Respuesta

9

Si su entrada como un argumento a la escritura, es decir,% 1,% 2, etc., se puede extraer sólo el nombre de archivo y extensión en una variable de la siguiente manera:

set FILENAME=%~nxN 

donde N es el índice del argumento Por ejemplo, este script se hará eco de sólo el nombre de archivo del primer argumento:

@echo off 
set FILENAME=%~nx1 
echo %FILENAME% 
+0

¡Gracias! Estaba volviendo a leer la ayuda y estaba complicando las instrucciones% ~ nxI. ¡¡¡¡Gracias!!!! – Michael

+0

Sí. Esas instrucciones son realmente sucky, si tienes la suerte de incluso encontrarlas. –

+0

+1 estaba a punto de preguntar esto, SO tiene un gran detector de preguntas duplicadas :-) –

2

ligeramente mejorada versión:

set FILENAME="%~nx1" 

El paréntesis adicional será asegurar que los caracteres especiales, como por ejemplo '&', no lo hará interferir durante la ejecución del lote.

Cuestiones relacionadas