Bene, per ottenere solo il nome del file del tuo batch il modo più semplice sarebbe semplicemente usare %~n0
.
@echo %~n0
produrrà il nome (senza estensione) del file batch attualmente in esecuzione (a meno che non venga eseguito in una subroutine chiamata da call
). L'elenco completo di tali sostituzioni "speciali" per i nomi dei percorsi è disponibile help for
alla fine dell'aiuto:
Inoltre, è stata migliorata la sostituzione dei riferimenti alle variabili FOR. Ora puoi usare la seguente sintassi opzionale:
%~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
I modificatori possono essere combinati per ottenere risultati composti:
%~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
Per rispondere con precisione alla tua domanda, tuttavia: i sottostringhi vengono eseguiti utilizzando la :~start,length
notazione:
%var:~10,5%
estrarrà 5 caratteri dalla posizione 10 nella variabile d'ambiente %var%
.
NOTA: l'indice delle stringhe è basato su zero, quindi il primo carattere è nella posizione 0, il secondo in 1, ecc.
Per ottenere sottostringhe di variabili argomento come %0
, %1
ecc., Devi assegnarle a una normale variabile d'ambiente usando set
prima:
:: Does not work:
@echo %1:~10,5
:: Assign argument to local variable first:
set var=%1
@echo %var:~10,5%
La sintassi è ancora più potente:
%var:~-7%
estrae gli ultimi 7 caratteri da %var%
%var:~0,-4%
estrarrebbe tutti i caratteri tranne gli ultimi quattro che ti libererebbero anche dell'estensione del file (assumendo tre caratteri dopo il punto [ .
]).
Vedere help set
per i dettagli su quella sintassi.
setlocal ENABLEDELAYEDEXPANSION \r\n for /f %%s in ('set') do ( \r\n set tmp=%%s \r\n echo !tmp:~-3! \r\n )