Bueno, solo por obtener el nombre de archivo de su lote la manera más fácil sería simplemente usar %~n0
.
@echo %~n0
le mostrará el nombre (sin la extensión) del archivo por lotes se ejecuta actualmente (a no ser ejecutado en una subrutina llamada por call
). La lista completa de tales sustituciones “especiales” para los nombres de ruta se puede encontrar con help for
, al final de la ayuda:
Además, la sustitución de las referencias a variables PARA se ha mejorado. Ahora puede utilizar el 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
Para responder con precisión a su pregunta, sin embargo: Subcadenas terminado de usar la notación :~start,length
:
%var:~10,5%
extraerá 5 caracteres de la posición 10 en la variable de entorno %var%
.
NOTA: El índice de las cuerdas se basa cero, por lo que el primer carácter está en la posición 0, el segundo a 1, etc.
Para obtener subcadenas de variables de argumentos tales como %0
, %1
, etc. . tiene que asignar a una variable de entorno normal usando set
primera:
:: 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 potente:
%var:~-7%
extrae los últimos 7 caracteres de %var%
%var:~0,-4%
se extraerían todos los caracteres excepto el último de cuatro que también le libraría de la extensión de archivo (suponiendo tres caracteres después del período [.
]).
Consulte help set
para obtener detalles sobre esa sintaxis.
Esa es una gran respuesta completa. Muchas gracias. – JosephStyons
Bueno, esas son ahora tres respuestas enrolladas en una o más, gracias a Patrick :) – Joey
La extracción de subcadena no funciona con las variables de bucle FOR tampoco, así que tendrás que hacer lo siguiente (\ r \ n en la línea de código se rompe porque SO parece no permitir saltos de línea en los comentarios): 'setlocal ENABLEDELAYEDEXPANSION \ r \ n para/f %% s en ('set') do (\ r \ n \t conjunto tmp = %% s \ r \ n \t echo! Tmp: ~ -3! \ R \ n ) ' – Fr0sT