Pertama, saya melihat topik ini tetapi saya tidak mengerti.
Pertanyaan :
Ada file batch D:\path\to\file.bat
dengan konten berikut:
echo %cd%
pause
Output adalah:
C:\
Pasti begitu D:\path\to
Apa yang saya lakukan salah?
windows
batch-file
working-directory
Hamed Kamrava
sumber
sumber
Jawaban:
Variabel read-only
%CD%
sistem menjaga jalur pemanggil batch, bukan lokasi file batch.Anda bisa mendapatkan nama skrip kumpulan itu sendiri seperti yang diketik oleh pengguna dengan
%0
(misscripts\mybatch.bat
.). Ekstensi parameter dapat diterapkan untuk ini sehingga%~dp0
akan mengembalikan Drive dan Path ke skrip batch (misalnyaW:\scripts\
) dan%~f0
akan mengembalikan nama path lengkap (misalnyaW:\scripts\mybatch.cmd
).Anda bisa merujuk ke file lain di folder yang sama dengan skrip batch dengan menggunakan sintaks ini:
Ini bahkan dapat digunakan dalam subrutin,
Echo %0
akan memberikan label panggilan tetapi,echo "%~nx0"
akan memberi Anda nama file skrip batch.Ketika
%0
variabel diperluas, hasilnya dilampirkan dalam tanda kutip.Lebih lanjut tentang parameter batch .
sumber
stm.sql
masukD:\Dir1\Dir2\stm.sql
. Saya perlumysql.exe -u root -p mysql < %cd%\stm.sql
menjalankan perintah stm.sql.*.bat
atau*.sh
?D:\Dir1\Dir2\batchfile.bat
danD:\Dir1\Dir2\stm.sql
. konten batchfile.bat adalah:mysql.exe -u root -p mysql < D:\Dir1\Dir2\stm.sql
dan konten stm.sql adalah beberapa perintah MySQL.echo %~dp0
akan mengembalikan jalur ke lokasi batch.echo %~f0
akan mengembalikan path ke batch dengan nama file.Sangat sederhana:
sumber
cd /d %~dp0
sebagai baris pertama file batch dan bekerjaDalam file .bat Anda:
Anda sekarang dapat menggunakan variabel
%mypath%
untuk referensi path file ke.bat
file. Untuk memverifikasi jalur sudah benar:Misalnya, file dipanggil
DIR.bat
dengan konten berikutmenjalankan dari direktori
g:\test\bat
akan mengulangi jalur itu di jendela perintah DOS.sumber
Inilah yang saya gunakan di bagian atas semua file batch saya. Saya baru saja menyalin / menempel dari folder template saya.
Mengatur path file batch saat ini ke% batdir% memungkinkan Anda untuk memanggilnya di stmts berikutnya dalam file batch saat ini, terlepas dari mana perubahan file batch ini. Menggunakan PUSHD memungkinkan Anda menggunakan POPD untuk dengan cepat mengatur lintasan file batch ini ke% batdir% asli. Ingat, jika menggunakan% batdir% ExtraDir atau% batdir% \ ExtraDir (tergantung pada versi mana yang digunakan di atas, mengakhiri garis miring terbalik atau tidak) Anda harus menyertakan seluruh string dalam tanda kutip ganda jika path memiliki spasi (yaitu "% batdir% ExtraDir" ). Anda selalu dapat menggunakan PUSHD% ~ dp0. [https: // ss64.com/ nt / syntax-args .html] memiliki lebih banyak parameter (% ~).
Perhatikan bahwa menggunakan (: :) di awal baris membuatnya menjadi baris komentar. Lebih penting lagi, menggunakan :: memungkinkan Anda untuk memasukkan pengalih, pipa, karakter khusus (yaitu <> | dll) dalam komentar itu.
Tentu saja, Powershell melakukan ini dan banyak lagi.
sumber
set batdir=%CD%
). Itu tidak apa-apa, karena itu adalah jalan ke pemanggil, bukan file bat itu sendiri. Satu-satunya cara yang valid untuk mendapatkan path ke file bat yang sedang dieksekusi adalah%~dp0
.