Dapatkan direktori yang berisi skrip kumpulan yang saat ini dieksekusi

30

Saya menggunakan %0file batch untuk mendapatkan direktori yang berisi file batch tetapi hasilnya adalah: -

c:\folder1\folder2\batch.bat

Saya ingin direktori saja, tanpa nama file batch, seperti ini: -

c:\folder1\folder2\

Bagaimana saya bisa melakukannya? Mungkin saya harus menyaring jalannya. Jika ya, bagaimana saya bisa melakukannya?

Mohammad AL-Rawabdeh
sumber
Saat menggunakan% 0 dalam file batch sebagai bagian dari baris perintah, Anda harus menggunakan% 0 \ .. \ RestOfStuff. Titik ganda membawanya kembali melewati nama file.
John Gardeniers
Direktori yang berisi skrip yang saat ini dieksekusi tidak harus sama dengan direktori kerja saat ini (CD)! Saya mengedit pertanyaan yang sesuai - sekarang menghindari istilah "direktori saat ini".
chiccodoro

Jawaban:

52
%~p0

Hanya akan mengembalikan jalur.

%~dp0

Akan mengembalikan drive + path.

Info lebih lanjut tentang subjek ini dapat ditemukan di situs Microsoft .

Informasi tentang sintaks ini juga dapat ditemukan dalam bantuan untuk perintah for dengan mengeksekusi for /?pada OS Windows.

Bart De Vos
sumber
2
Sebagai sumber referensi lain, daftar substitusi variabel yang sama juga ditampilkan saat Anda mengetikfor /?
Kevin
% ~ dp0 memberikan direktori file batch yang dieksekusi. Jika file batch berada di direktori yang berbeda, Anda mendapatkan direktori lain itu. % CD% selalu memberi Anda direktori saat ini.
Mihai Danila
@MihaiDanila, tidak, bukan itu yang ditanyakan OP.
Bart De Vos
Sebenarnya saya sampai pada pertanyaan ini sambil mencari cara untuk mendapatkan direktori saat ini . Ini adalah hit pertama di Google. Judulnya jelas mengatakan direktori saat ini , meskipun Anda benar tentang kontennya. Kami berdua benar, tetapi saya pikir lain dan saya lebih benar tentang apa yang sebenarnya disampaikan, terlepas dari apa yang dimaksudkan olehnya. Itu sebabnya saya naikkan jawaban lain ... Judul pertanyaan harus diganti namanya agar sinkron dengan pertanyaan itu sendiri.
Mihai Danila
1
Mungkin judul artikel dalam tautan tersebut dapat diberikan, karena tautan tersebut tidak lagi valid .....
Rupsingh Mathwale
16

Direktori saat ini disimpan dalam% CD%

user9517 mendukung GoFundMonica
sumber
4
% CD% reture path yang Anda jalankan batch dari itu bukan tempat file batch ada
Mohammad AL-Rawabdeh
4
@Mohammad: Memang, ini adalah direktori saat ini . Yang lainnya adalah direktori tempat file batch. Keduanya tidak sama dan pertanyaan Anda secara eksplisit menanyakan yang satu ini. Jadi tolong edit itu jika bukan itu yang Anda maksud.
Joey
% CD% mengembalikan path saat ini dari file batch tetapi gagal ketika kita menjalankan file batch sebagai administrator. Ketika kami menjalankan file batch sebagai administrator maka ia mengembalikan jalur System32. Jadi pilihan yang lebih baik adalah menggunakan% ~ dp0 untuk path lengkap
% ~ dp0 memberikan direktori file batch yang dieksekusi. Jika file batch berada di direktori yang berbeda, Anda mendapatkan direktori lain itu. % CD% selalu memberi Anda direktori saat ini.
Mihai Danila
Untuk referensi pembaca - pertanyaan awalnya menggunakan istilah "direktori saat ini" sementara artinya direktori yang berisi skrip - ini sekarang diperbaiki.
chiccodoro
4

Beberapa ekspresi yang mempengaruhi nama file:

~f0akan memberikan nama file yang sepenuhnya memenuhi syarat.
~dpnx0akan memberikan hasil yang sama ~f0, tetapi ini menunjukkan Anda bahwa Anda dapat memecahnya menjadi beberapa bagian: d = drive p = path n = nama x = ekstensi

Mechaflash
sumber
0

gunakan perintah chdir

Pilihan 1:

chdir 

Pilihan 2:

echo %CD%
sensoft
sumber
Sama di sini: Ini bukan niat OP - pertanyaannya sekarang lebih jelas.
chiccodoro