2013-06-12 16 views
189

Najpierw zobaczyłem this topic, ale nie mogłem tego zrozumieć.Pobierz aktualny katalog plików wsadowych

Pytanie:

Jest to plik wsadowy w D:\path\to\file.bat o następującej treści:

echo %cd% 
pause 

wyjściowa wynosi:

C:\ 

Musi być D:\path\to

Co ja robię źle?

+5

Powinieneś przeczytać wszystkie odpowiedzi na pytania, szczególnie te, które mają wyższy głos, a nie tylko akceptowane. Odpowiedź z najwyższym wynikiem w opublikowanym linku już odpowiada na twoje pytanie. – dbenham

+4

Jeśli jesteś w c: \ podczas wpisywania nazwy pliku wsadowego, to c: \ jest tym, co zostanie wydrukowane% cd%. – foxidrive

Odpowiedz

373

Zmienna tylko do odczytu systemowego %CD% przechowuje ścieżkę osoby wywołującej wsad, a nie lokalizację pliku wsadowego.

Można uzyskać nazwę samego skryptu wsadowego, wpisaną przez użytkownika pod numerem %0 (np. scripts\mybatch.bat). Parameter extensions można zastosować do tego, aby %~dp0 zwrócił Dysk i ścieżkę do skryptu wsadowego (np. W:\scripts\), a %~f0 zwróci pełną nazwę ścieżki (na przykład W:\scripts\mybatch.cmd).

Można odwołać się do innych plików w tym samym folderze co skrypcie za pomocą tej składni:

CALL %0\..\SecondBatch.cmd 

To mogą być używane nawet w podprogramie, Echo %0 da etykietę rozmowę, ale echo "%~nx0" da nazwę pliku skryptu wsadowego.

Po rozwinięciu zmiennej %0 wynik jest ujęty w cudzysłowy.

More on batch parameters.

+1

Posłuchaj, nie muszę uruchamiać 'stm.sql' w' D: \ Dir1 \ Dir2 \ stm.sql'. Potrzebuję 'mysql.exe -u root -p mysql <% cd% \ stm.sql', aby wykonać komendy stm.sql. –

+0

@HamedKamrava jest dla mojej partii SQL? nie plik wsadowy jak '*.bat' lub '* .sh'? – Stoleg

+0

@ Stoleg- W rzeczywistości istnieją 2 pliki w 'D: \ Dir1 \ Dir2 \ batchfile.bat' i' D: \ Dir1 \ Dir2 \ stm.sql'. batchfile.bat to: 'mysql.exe -u root -p mysql

77

Bardzo prosta:

setlocal 
cd /d %~dp0 
File.exe 
+5

Kod jest krótki, ale nie jest łatwy do zrozumienia. Co to jest plik File.exe? Czy aktualna ścieżka do katalogu jest przechowywana w% ~ dp0? –

+1

@IvailoBardarov Oto odpowiedź: https://stackoverflow.com/a/18310141/5259296 –

+0

Ta odpowiedź właściwie odpowiada na pytanie, jak sądzę. Sława. – macetw

14

W ramach pliku .bat:

set mypath=%cd% 

Teraz można użyć zmiennej %mypath% odwołać ścieżkę pliku do pliku .bat. Aby sprawdzić ścieżki jest poprawna:

@echo %mypath% 

Na przykład, plik o nazwie DIR.bat z następujących zawartości

set mypath=%cd% 
@echo %mypath% 
Pause 

Uruchom z katalogu g:\test\bat ogłosi tę ścieżkę w oknie poleceń DOS.

+0

to jest najlepsze i najprostsze rozwiązanie – Nani

Powiązane problemy