Jaki jest bieżący katalog w pliku wsadowym?

510

Chcę utworzyć kilka plików wsadowych w celu zautomatyzowania programu.

Moje pytanie brzmi: kiedy tworzę plik wsadowy, jaki jest bieżący katalog? Czy to katalog, w którym znajduje się plik, czy to ten sam katalog, który pojawia się w wierszu polecenia, czy coś innego?

Aaron de Windt
źródło

Odpowiedzi:

1025

Z poziomu pliku wsadowego:

  • %cd%odnosi się do bieżącego katalogu roboczego (zmienna)
  • %~dp0 odnosi się do pełnej ścieżki do katalogu pliku wsadowego (statyczny)
  • %~dpnx0i %~f0oba odnoszą się do pełnej ścieżki do katalogu wsadowego i nazwy pliku (statyczny).

Zobacz także: Co oznacza% ~ dp0 i jak to działa?

JRL
źródło
5
@ Јοеу - %0mógłby podać nazwę bieżącego podprogramie, ale %~dp0będzie zawsze podać pełną ścieżkę do wykonującego pliku wsadowego.
dbenham
77
W rzeczywistości wygląda na to, że% ~ dp0 podaje pełną ścieżkę do katalogu , w którym znajduje się wykonujący plik wsadowy.% ~ Dpnx0 (co odpowiada% ~ f0) podaje pełną ścieżkę do pliku wsadowego. Więcej informacji na stronie robvanderwoude.com/parameters.php .
deadlydog
6
Zobacz także dobre szczegółowe odpowiedzi na podobne pytanie: Uzyskaj listę przekazanych argumentów w skrypcie wsadowym systemu Windows (.bat)
olibre
1
Niestety, gdy uruchomiony jako proces z .net% ~ dp0 jest katalogiem roboczym, a nie katalogiem plików wsadowych, znalazłem to na własnej skórze.
trampster
3
Jako bardziej wyraźny przykład, po kliknięciu .cmdpliku prawym przyciskiem myszy i uruchomieniu jako administrator, %cd%podaje C:\WINDOWS\system32i %~dp0podaje katalog plików wsadowych z końcowym ukośnikiem.
icc97
25

To zwykle jest katalog, z którego uruchamiany jest plik wsadowy, ale jeśli uruchomić plik wsadowy ze skrótu, inny katalog począwszy może być podana. Ponadto, gdy jesteś w cmd, a bieżącym katalogiem jest c:\dir3, nadal możesz uruchomić plik wsadowy, c:\dir1\dir2\batch.batw którym to przypadku będzie to katalog bieżący c:\dir3.

GolezTrol
źródło
11

W pliku wsadowym% cd% jest najczęściej używanym poleceniem dla bieżącego katalogu, chociaż możesz ustawić własną zmienną:

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

Powiedzmy, że chcesz otworzyć Myprog.exe. Jeśli byłby w tym samym folderze, użyłbyś polecenia:

start %mypath%\Myprog.exe

To otworzy Myprog z bieżącego folderu.

Inną opcją jest utworzenie katalogu w C: o nazwie AutomatePrograms. Następnie przenosisz pliki do tego folderu, a następnie możesz je otworzyć za pomocą następującego polecenia:

start "" "C:\AutomatePrograms\Myprog1.exe"
start "" "C:\AutomatePrograms\Myprog2.exe"
start "" "C:\AutomatePrograms\Myprog3.exe"
J. Bond
źródło
1
Jak zauważono w górnej odpowiedzi tutaj, %cd%jest zmienna, więc uruchomienie pliku wsadowego z Eksploratora Windows jako administrator da, C:\WINDOWS\system32co prawie na pewno nie jest tym, czego chcesz. %~dp0jest bardziej spójny.
icc97
6

Załóżmy, że otwierasz plik w bieżącym katalogu. Poleceniem byłoby:

 start %cd%\filename.filetype

Mam nadzieję, że odpowiedziałem na twoje pytanie.

Ping wiele razy
źródło
5

Jest to katalog, z którego uruchomiono polecenie wykonania pliku wsadowego.

Jak wspomniano w powyższych odpowiedziach, możesz dodać poniższe polecenie do skryptu, aby zweryfikować:

> set current_dir=%cd%
> echo %current_dir%  
anuj0901
źródło
4

Jest to katalog, w którym uruchamiasz plik wsadowy. Np. Jeśli twoja partia jest w środku, c:\dir1\dir2a ty to zrobisz cd c:\dir3, uruchom ją, bieżącym katalogiem będzie c:\dir3.

icyrock.com
źródło
0

Tylko moje 2 centy. Następujące polecenie nie powiedzie się, jeśli zostanie wywołane z pliku wsadowego (Windows 7) umieszczonego na pendrive:

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

Ale to działa:

xcopy /s /e /i %~dp0Ala C:\KS\Ala
Darek Adamkiewicz
źródło
Jest to przełącznik, którego szukałem, aby określić ścieżkę katalogu nadrzędnego mojego pliku nietoperza bez nazwy tego pliku wsadowego:%~dp0
Ammar Mohammad