Po pierwsze widziałem ten temat, ale nie mogłem tego zrozumieć.
Pytanie:
Plik wsadowy D:\path\to\file.bat
zawiera następującą treść:
echo %cd%
pause
Dane wyjściowe to:
C:\
To musi być D:\path\to
Co ja robię źle?
windows
batch-file
working-directory
Hamed Kamrava
źródło
źródło
Odpowiedzi:
Systemowa zmienna tylko do odczytu
%CD%
utrzymuje ścieżkę wywołującą partia, a nie lokalizację pliku wsadowego.Możesz uzyskać nazwę samego skryptu wsadowego wpisaną przez użytkownika za pomocą
%0
(npscripts\mybatch.bat
.). Można do tego zastosować rozszerzenia parametrów, więc%~dp0
zwróci Dysk i Ścieżkę do skryptu wsadowego (np.W:\scripts\
) I%~f0
zwróci pełną nazwę ścieżki (np.W:\scripts\mybatch.cmd
.).Możesz odwoływać się do innych plików w tym samym folderze co skrypt wsadowy, używając następującej składni:
Można tego użyć nawet w podprogramie,
Echo %0
nada etykietę wywołania, aleecho "%~nx0"
poda nazwę pliku skryptu wsadowego.Po
%0
rozwinięciu zmiennej wynik jest ujęty w cudzysłów.Więcej na temat parametrów partii .
źródło
stm.sql
wD:\Dir1\Dir2\stm.sql
. Muszęmysql.exe -u root -p mysql < %cd%\stm.sql
wykonać polecenia stm.sql.*.bat
lub*.sh
?D:\Dir1\Dir2\batchfile.bat
iD:\Dir1\Dir2\stm.sql
. Plik batchfile.bat to:mysql.exe -u root -p mysql < D:\Dir1\Dir2\stm.sql
a zawartość stm.sql to niektóre polecenia MySQL.echo %~dp0
zwróci ścieżkę do lokalizacji partii.echo %~f0
zwróci ścieżkę do partii z nazwą pliku.Bardzo prosty:
źródło
cd /d %~dp0
jako pierwszego wiersza pliku wsadowego i zadziałałemW pliku .bat:
Teraz możesz użyć tej zmiennej,
%mypath%
aby odwoływać się do ścieżki pliku do.bat
pliku. Aby sprawdzić, czy ścieżka jest poprawna:Na przykład plik
DIR.bat
o następującej treścig:\test\bat
Uruchom z katalogu spowoduje wyświetlenie echa tej ścieżki w oknie poleceń DOS.źródło
Oto, czego używam na górze wszystkich moich plików wsadowych. Po prostu kopiuję / wklejam z mojego folderu szablonów.
Ustawienie ścieżki bieżącego pliku wsadowego na% batdir% pozwala wywoływać go w kolejnych stmts w bieżącym pliku wsadowym, niezależnie od tego, gdzie zmieni się ten plik wsadowy. Użycie PUSHD pozwala na użycie POPD do szybkiego ustawienia ścieżki tego pliku wsadowego na oryginalny% batdir%. Pamiętaj, że jeśli używasz% batdir% ExtraDir lub% batdir% \ ExtraDir (w zależności od wersji użytej powyżej, kończąc odwrotnym ukośnikiem, czy nie), musisz zawrzeć cały ciąg w cudzysłowie, jeśli ścieżka zawiera spacje (tj. „% Batdir% ExtraDir” ). Zawsze możesz użyć PUSHD% ~ dp0. [https: // ss64.com/ nt / syntax-args .html] ma więcej parametrów (% ~).
Zauważ, że użycie (: :) na początku linii powoduje, że jest to linia komentarza. Co ważniejsze, użycie :: pozwala na włączenie w tym komentarzu przekierowań, potoków, znaków specjalnych (tj. <> | Itd.).
Oczywiście Powershell robi to i wiele więcej.
źródło
set batdir=%CD%
). Nie jest to w porządku, ponieważ jest to ścieżka do dzwoniącego, a nie sam plik nietoperza. Jedynym prawidłowym sposobem uzyskania ścieżki do wykonującego się pliku nietoperza jest%~dp0
.