Bueno, para obtener el nombre de archivo de su lote, la forma más fácil sería usarlo %~n0
.
@echo %~n0
generará el nombre (sin la extensión) del archivo por lotes actualmente en ejecución (a menos que se ejecute en una subrutina llamada por call
). La lista completa de tales sustituciones "especiales" para nombres de ruta se puede encontrar con help for
, al final de la ayuda:
Además, se ha mejorado la sustitución de referencias variables FOR. Ahora puede usar la siguiente sintaxis opcional:
%~I - expands %I removing any surrounding quotes (")
%~fI - expands %I to a fully qualified path name
%~dI - expands %I to a drive letter only
%~pI - expands %I to a path only
%~nI - expands %I to a file name only
%~xI - expands %I to a file extension only
%~sI - expanded path contains short names only
%~aI - expands %I to file attributes of file
%~tI - expands %I to date/time of file
%~zI - expands %I to size of file
%~$PATH:I - searches the directories listed in the PATH
environment variable and expands %I to the
fully qualified name of the first one found.
If the environment variable name is not
defined or the file is not found by the
search, then this modifier expands to the
empty string
Los modificadores se pueden combinar para obtener resultados compuestos:
%~dpI - expands %I to a drive letter and path only
%~nxI - expands %I to a file name and extension only
%~fsI - expands %I to a full path name with short names only
Sin embargo, para responder con precisión a su pregunta: las subcadenas se realizan utilizando la :~start,length
notación:
%var:~10,5%
extraerá 5 caracteres de la posición 10 en la variable de entorno %var%
.
NOTA: El índice de las cadenas está basado en cero, por lo que el primer carácter está en la posición 0, el segundo en 1, etc.
Para obtener subcadenas de variables de argumento como %0
, %1
etc., debe asignarlas a una variable de entorno normal usando set
primero:
:: Does not work:
@echo %1:~10,5
:: Assign argument to local variable first:
set var=%1
@echo %var:~10,5%
La sintaxis es aún más poderosa:
%var:~-7%
extrae los últimos 7 caracteres de %var%
%var:~0,-4%
extraería todos los caracteres, excepto los últimos cuatro, que también lo eliminarían de la extensión del archivo (suponiendo tres caracteres después del punto [ .
]).
Consulte help set
para más detalles sobre esa sintaxis.
setlocal ENABLEDELAYEDEXPANSION \r\n for /f %%s in ('set') do ( \r\n set tmp=%%s \r\n echo !tmp:~-3! \r\n )