Mam plik wsadowy, który znajduje się w katalogu i musi być uruchamiany stamtąd, ponieważ aktualizuje pliki w tym katalogu.
Działa to doskonale, z wyjątkiem sytuacji, gdy użytkownik uruchamia plik wsadowy jako administrator (wymagany w systemie Vista). Następnie katalog początkowy to C: \ Windows \ System32.
Czy istnieje sposób, aby nadal wiedzieć, z którego katalogu został uruchomiony plik wsadowy?
Nie chcę, aby użytkownik ręcznie wchodził do katalogu.Katalog początkowy plików wsadowych systemu Windows po uruchomieniu "admin as
Odpowiedz
Spróbuj uzyskać dostęp do ścieżki pliki wsadowe takiego:
echo %~dp0
Aby uzyskać więcej informacji, zobacz następujący cytat z poleceniem for /?
który opisuje w jaki sposób powyższe polecenie działa:
You can now use the following optional syntax: %~I - expands %I removing any surrounding quotes (") %~fI - expands %I to a fully qualified path name %~dI - expands %I to a drive letter only %~pI - expands %I to a path only %~nI - expands %I to a file name only %~xI - expands %I to a file extension only %~sI - expanded path contains short names only %~aI - expands %I to file attributes of file %~tI - expands %I to date/time of file %~zI - expands %I to size of file %~$PATH:I - searches the directories listed in the PATH environment variable and expands %I to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, then this modifier expands to the empty string The modifiers can be combined to get compound results: %~dpI - expands %I to a drive letter and path only %~nxI - expands %I to a file name and extension only %~fsI - expands %I to a full path name with short names only %~dp$PATH:I - searches the directories listed in the PATH environment variable for %I and expands to the drive letter and path of the first one found. %~ftzaI - expands %I to a DIR like output line
używać:
cd% 0 ..
na początku Inning pliku wsadowego do zmiany katalogu do katalogu, w którym plik wsadowy został uruchomiony
-Mathew
To nie zmieni litery dysku. –
roztwór roboczy tutaj.
http://www.vistax64.com/vista-general/79849-run-administrator-changes-default-directory.html
FOR/F %% I w ("% 0") należy ustawiać BATDIR = %% ~ dpi
echo plik wsadowy znajduje się w katalogu% BATDIR%
Możesz bezpośrednio użyć '% ~ dp0'. Nie ma potrzeby przywoływania 'for' tutaj. – Joey
Lepsze niż cd
jest pushd
które
- zmiana litera dysku, jeśli począwszy od
D:\...
- przypisać literę dysku, czy na ścieżce sieciowej UNC
Więc pushd %~dp0
jest dobra.
Dobra praktyka to połączenie popd
po zakończeniu.
To powinno rozwiązać problem przez ustawienie katalogu roboczego dla pliku wsadowego z powrotem do bieżącego katalogu:
zawierać te dwie linie w górnej części skryptu bat:
@setlocal enableextensions
@cd /d "%~dp0"
Znalezione w : http://www.codeproject.com/Tips/119828/Running-a-bat-file-as-administrator-Correcting-cur
To jest idealne. Rozwiązałem mój problem "nie znaleziono pliku" podczas uruchamiania pliku bat jako administrator. – pandalion98
Możesz CD bezpośrednio z nazwy pliku, dodając rodzica (nie testowane w Windows 8.x, ale działało "na zawsze", o ile pamiętam).
CD %FILENAME%\..
i dysk CD zmieni także dyski, używając/D, pokazanego powyżej, ale nie wymienionego wyraźnie, co może zostać pominięte. CD/D% FILENAME% \ ..
(FOR /? IF /? SET /? CALL /? GOTO /? wszystkim zapewnić wysoce użyteczny odczyt jeśli używasz cmd.exe, ja ponownie przeczytać je raz na jakiś czas.)
Fantastic , Nie znałem tego. Wielkie dzięki – Marc
Jak niezrozumiałe! Ale dokładnie to, czego potrzebowałem. Dzięki. – stucampbell
@stucampbell wypróbuj polecenie "dla /?" aby uzyskać szczegółowy opis tego działania (przewiń w dół do strony 4) – Martin