Sadece, toplu işinizin dosya adını almak için en kolay yol sadece kullanmak olacaktır %~n0
.
@echo %~n0
çalışmakta olan toplu iş dosyasının adını (uzantısı olmadan) verir (tarafından çağrılan bir alt yordamda yürütülmedikçe call
). Yol adları için bu tür "özel" ikamelerin tam listesini help for
yardımın sonunda bulabilirsiniz:
Ek olarak, FOR değişken referanslarının ikamesi geliştirilmiştir. Artık aşağıdaki isteğe bağlı sözdizimini kullanabilirsiniz:
%~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
Değiştiriciler, bileşik sonuçlar elde etmek için birleştirilebilir:
%~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
Ancak sorunuzu tam olarak cevaplamak için: Alt dizeler :~start,length
notasyon kullanılarak yapılır :
%var:~10,5%
ortam değişkenindeki 10. konumdan 5 karakter ayıklayacaktır %var%
.
NOT: Dizelerin dizini sıfır tabanlıdır, bu nedenle ilk karakter 0 konumunda, ikincisi 1'de vb.
Gibi argüman değişkenlerinin alt dizeleri almak için %0
, %1
vb normal bir ortam değişkeni kullanarak bunları atamak zorunda set
ilk:
:: Does not work:
@echo %1:~10,5
:: Assign argument to local variable first:
set var=%1
@echo %var:~10,5%
Sözdizimi daha da güçlü:
%var:~-7%
son 7 karakteri ayıklar %var%
%var:~0,-4%
dosya uzantısından da sizi kurtaracak son dördü hariç tüm karakterleri alır (noktadan [ .
] sonra üç karakter varsayarak ).
help set
Söz dizimiyle ilgili ayrıntılar için bkz .
setlocal ENABLEDELAYEDEXPANSION \r\n for /f %%s in ('set') do ( \r\n set tmp=%%s \r\n echo !tmp:~-3! \r\n )