Bem, para obter o nome do arquivo do seu lote, a maneira mais fácil seria usar %~n0
.
@echo %~n0
produzirá o nome (sem a extensão) do arquivo em lotes atualmente em execução (a menos que seja executado em uma sub-rotina chamada por call
). A lista completa dessas substituições "especiais" para nomes de caminhos pode ser encontrada help for
no final da ajuda:
Além disso, a substituição das referências de variáveis FOR foi aprimorada. Agora você pode usar a seguinte sintaxe 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
Os modificadores podem ser combinados para obter resultados compostos:
%~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 com precisão à sua pergunta, no entanto: Substrings são feitas usando a :~start,length
notação:
%var:~10,5%
extrairá 5 caracteres da posição 10 na variável de ambiente %var%
.
NOTA: O índice das seqüências de caracteres é baseado em zero, portanto, o primeiro caractere está na posição 0, o segundo em 1, etc.
Para obter substrings de variáveis de argumento como %0
, %1
etc., você deve atribuí-las a uma variável de ambiente normal usando set
primeiro:
:: Does not work:
@echo %1:~10,5
:: Assign argument to local variable first:
set var=%1
@echo %var:~10,5%
A sintaxe é ainda mais poderosa:
%var:~-7%
extrai os últimos 7 caracteres de %var%
%var:~0,-4%
extrairia todos os caracteres, exceto os quatro últimos, que também o livrariam da extensão do arquivo (assumindo três caracteres após o período [ .
]).
Veja help set
para detalhes sobre essa sintaxe.
setlocal ENABLEDELAYEDEXPANSION \r\n for /f %%s in ('set') do ( \r\n set tmp=%%s \r\n echo !tmp:~-3! \r\n )