Variabel untuk mendapatkan path absolut dalam skrip batch windows


9

Saya memiliki skrip berikut untuk mencantumkan semua file, secara rekursif dari direktori, memiliki .phtmlekstensi.

@echo off
setlocal
for /f %%G in ('forfiles /s /m *.phtml /c "cmd /c echo @relpath"') do echo %%G >> listoffiles.txt
endlocal
exit

Ini mencantumkan hanya jalur relatif ke file. Script di atas berjalan dari lokasi perantara, jadi saya tidak mendapatkan path lengkap dalam @relpathvariabel.

Saya juga mendapatkan penawaran di baris hasil, yang ingin saya hapus.

Saya ingin mendapatkan path absolut ke file-file dengan beberapa perubahan kode mungkin, jika variabel global tersedia yang dapat digunakan dalam kode saya maka itu yang terbaik bagi saya, karena saya tidak banyak Windows batch scripter.

Jawaban:


3

Saya tidak mendapatkan path lengkap dalam @relpathvariabel.

juga saya mendapatkan penawaran di baris hasil, yang ingin saya hapus.

File batch berikut melakukan apa yang Anda inginkan:

@echo off
setlocal enableDelayedExpansion
for /f %%G in ('forfiles /s /m *.phtml /c "cmd /c echo @path"') do (
  set _name=%%G
  rem strip the quotes
  echo !_name:~1,-1! >> listoffiles.txt
  )
endlocal
exit

Catatan:

  • Penggunaan @path(Path lengkap file) alih-alih @relpath(Path relatif file).
  • Menggunakan substringekspresi variabel untuk menghapus tanda kutip ( :~1,-1menghapus karakter pertama dan terakhir dari string variabel).
  • Digunakan setlocal EnableDelayedExpansionagar variabel diperbarui dengan benar di forloop.

Bacaan lebih lanjut

  • Indeks AZ dari baris perintah CMD Windows - Referensi yang sangat baik untuk semua hal yang terkait dengan Windows CMD.
  • enabledelayedexpansion - Ekspansi yang tertunda akan menyebabkan variabel diperluas pada waktu eksekusi daripada pada waktu parse.
  • untuk / f - Loop perintah terhadap hasil perintah lain.
  • forfiles - Pilih file (atau set file) dan jalankan perintah pada setiap file. Pemrosesan batch.
  • variabel - Ekstrak bagian dari variabel (substring).
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.