Nah, untuk hanya mendapatkan nama file batch Anda, cara termudah adalah dengan menggunakannya %~n0
.
@echo %~n0
akan menampilkan nama (tanpa ekstensi) dari file batch yang sedang berjalan (kecuali dijalankan dalam subrutin yang dipanggil oleh call
). Daftar lengkap pergantian "khusus" untuk nama jalur seperti itu dapat ditemukan help for
, di bagian paling akhir bantuan:
Selain itu, substitusi referensi variabel FOR telah ditingkatkan. Anda sekarang dapat menggunakan sintaks opsional berikut:
%~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
Pengubah dapat digabungkan untuk mendapatkan hasil majemuk:
%~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
Untuk menjawab pertanyaan Anda dengan tepat, namun: Substring dilakukan menggunakan :~start,length
notasi:
%var:~10,5%
akan mengekstraksi 5 karakter dari posisi 10 dalam variabel lingkungan %var%
.
CATATAN: Indeks string berdasarkan nol, sehingga karakter pertama berada di posisi 0, yang kedua di 1, dll.
Untuk mendapatkan substring dari variabel argumen seperti %0
, %1
, dll Anda harus menetapkan mereka untuk variabel lingkungan yang normal menggunakan set
pertama:
:: Does not work:
@echo %1:~10,5
:: Assign argument to local variable first:
set var=%1
@echo %var:~10,5%
Sintaksnya bahkan lebih kuat:
%var:~-7%
ekstrak 7 karakter terakhir dari %var%
%var:~0,-4%
akan mengekstrak semua karakter kecuali empat yang terakhir yang juga akan menghilangkan Anda dari ekstensi file (dengan asumsi tiga karakter setelah periode [ .
]).
Lihat help set
detail tentang sintaks itu.
setlocal ENABLEDELAYEDEXPANSION \r\n for /f %%s in ('set') do ( \r\n set tmp=%%s \r\n echo !tmp:~-3! \r\n )