Apa direktori saat ini dalam file batch?

510

Saya ingin membuat beberapa file batch untuk mengotomatisasi program.

Pertanyaan saya adalah ketika saya membuat file batch, apa direktori saat ini? Apakah ini direktori tempat file berada atau direktori yang sama yang muncul pada command prompt, atau yang lainnya?

Aaron de Windt
sumber

Jawaban:

1026

Dari dalam file batch Anda:

  • %cd%merujuk ke direktori kerja saat ini (variabel)
  • %~dp0 merujuk ke path lengkap ke direktori file batch (statis)
  • %~dpnx0dan %~f0keduanya merujuk ke path lengkap ke direktori batch dan nama file (statis).

Lihat juga: Apa yang dimaksud% ~ dp0, dan bagaimana cara kerjanya?

JRL
sumber
5
@ Јοеу - %0dapat memberikan nama subrutin saat ini, tetapi %~dp0akan selalu memberikan path lengkap ke file batch yang dieksekusi.
dbenham
77
Sebenarnya, sepertinya% ~ dp0 memberikan path lengkap ke direktori tempat file batch sedang dieksekusi.% ~ Dpnx0 (yang setara dengan% ~ f0) memberikan path lengkap ke file batch. Lihat robvanderwoude.com/parameters.php untuk detail lebih lanjut.
deadlydog
6
Lihat juga jawaban terperinci yang bagus untuk pertanyaan serupa: Dapatkan daftar argumen yang lulus dalam skrip kumpulan Windows (.bat)
olibre
1
Sayangnya ketika dijalankan sebagai proses dari .net% ~ dp0 adalah direktori kerja bukan direktori file batch, Menemukan ini dengan cara yang sulit.
trampster
3
Sebagai contoh yang lebih eksplisit, ketika mengklik kanan pada .cmdfile dan menjalankannya sebagai administrator, %cd%memberi C:\WINDOWS\system32dan %~dp0memberikan direktori file batch dengan trailing slash.
icc97
25

Ini biasanya adalah direktori dari mana file batch dimulai, tetapi jika Anda mulai file batch dari jalan pintas, direktori mulai berbeda dapat diberikan. Juga, ketika Anda dalam cmd, dan direktori Anda saat ini adalah c:\dir3, Anda masih bisa memulai file batch menggunakan c:\dir1\dir2\batch.batdalam hal ini, direktori saat ini akan c:\dir3.

GolezTrol
sumber
11

Dalam file batch,% cd% adalah perintah yang paling umum digunakan untuk direktori saat ini, meskipun Anda dapat mengatur variabel Anda sendiri:

set mypath=%cd%
echo %mypath% (where %mypath% is the current directory that the batch file is sitting in)

Jadi katakan Anda ingin membuka Myprog.exe. Jika berada di folder yang sama, Anda akan menggunakan perintah:

start %mypath%\Myprog.exe

Itu akan membuka Myprog dari folder saat ini.

Pilihan lainnya adalah membuat direktori di C: disebut AutomatePrograms. Kemudian, Anda mentransfer file Anda ke folder itu lalu Anda dapat membukanya menggunakan perintah berikut:

start "" "C:\AutomatePrograms\Myprog1.exe"
start "" "C:\AutomatePrograms\Myprog2.exe"
start "" "C:\AutomatePrograms\Myprog3.exe"
J. Bond
sumber
1
Seperti disebutkan dalam jawaban teratas di sini, %cd%adalah variabel, jadi menjalankan file batch dari Windows Explorer sebagai admin akan memberikan C:\WINDOWS\system32yang hampir pasti bukan yang Anda inginkan. %~dp0lebih konsisten.
icc97
6

Katakanlah Anda membuka file di direktori Anda saat ini. Perintahnya adalah:

 start %cd%\filename.filetype

Saya harap saya menjawab pertanyaan Anda.

Ping Berulang Kali
sumber
5

Ini adalah direktori tempat Anda menjalankan perintah untuk menjalankan file batch Anda.

Seperti disebutkan dalam jawaban di atas, Anda dapat menambahkan perintah di bawah ini ke skrip Anda untuk memverifikasi:

> set current_dir=%cd%
> echo %current_dir%  
anuj0901
sumber
4

Ini adalah direktori dari mana Anda memulai file batch. Misal, jika batch Anda ada c:\dir1\dir2dan Anda melakukannya cd c:\dir3, maka jalankan batch, direktori saat ini akan c:\dir3.

icyrock.com
sumber
0

Hanya 2 sen saya. Perintah berikut gagal jika dipanggil dari file batch (Windows 7) ditempatkan di flashdisk:

xcopy /s /e /i %cd%Ala C:\KS\Ala

Tapi ini berhasil:

xcopy /s /e /i %~dp0Ala C:\KS\Ala
Darek Adamkiewicz
sumber
Ini adalah saklar yang saya cari untuk menentukan jalur direktori induk dari file bat saya tanpa nama file batch:%~dp0
Ammar Mohammad