for /r %f in (*) do echo %f
Memberikan nama file keluaran beserta seluruh path
\path\to\dir\<filename>
Bagaimana cara saya mendapatkan <filename>
tanpa menyertakan jalan? Saya perlu menggunakan string 'nama file' itu.
Juga, apakah mungkin untuk melakukan hal berikut, setelah nama file diperoleh?
for /r %%f in (*) do (
echo "blah blah blah 'filename'" >> blahblah_filename.txt
)
for
perintah.Jawaban:
Gunakan
%~nxf
untuk<filename>.<extension>
.Dan ya, Anda bisa melakukannya:
Lihat
for /?
:sumber
find
ataufindstr
, misalnyaecho %%f | find "\.git\" > NUL
atauecho %%f | findstr /R /C:"\\\.git\\" /C:"\\\.git\>" > NUL
kemudian memeriksa tingkat kesalahan denganif
perintah. (findstr regex sangat terbatas, jadi itulah upaya saya untuk menegakkan sebuah pemimpin\
dan [baik trailing\
atau akhir string]). Perhatikan bahwaif errorlevel
memiliki quirks dengan fall-through, dan Anda mungkin tidak bisaif %errorlevel%
berada dalam satu lingkaran sehingga Anda mungkin perluSetLocal EnableDelayedExpansion
terlebih dahulu dan kemudianif !errorlevel!
sebagai gantinya.%~nxf
adalah nama file, seperti yang saya katakan di kalimat pertama. Saat Anda menggunakannya dalam file batch, Anda harus menggandakannya%
, membuatnya%%~nxf
. Iniblah blah blah
hanya mengambil contoh dalam pertanyaan dan menggantifilename
bit dengan%%~nxf
substitusi -blah
itu hanya pengisi dan tidak memiliki makna tertentu.Saya belum bisa berkomentar, tetapi saya percaya yang berikut ini harus diperhatikan untuk menghindari kebingungan.
Meskipun
f
dapat digunakan sebagai nama variabel FOR, yang terbaik adalah menggunakan huruf lain untuk menghindari kebingungan dengan format suratf
(yang, seperti yang dinyatakan dalam jawaban Bob, mengembalikan nama path lengkap), atau setidaknya menggunakan modalF
.sumber