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?

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?


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.


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"

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.


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%  

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.


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.