Uważam, że jest %~dp0
bardzo przydatny i często go używam, aby moje pliki wsadowe były bardziej przenośne.
Ale sama etykieta wydaje mi się bardzo tajemnicza ... Co ~
robi? Czy dp
oznacza dysk i ścieżkę? Czy 0
odnosi się do %0
ścieżki do pliku wsadowego zawierającego nazwę pliku?
Czy to tylko dziwna etykieta?
Chciałbym również wiedzieć, czy jest to udokumentowana funkcja, czy coś skłonnego do przestarzałości.
batch-file
Sebastián Grignoli
źródło
źródło
%~dp0
. Zwykle uważam, że najpopularniejsze hity odnoszą się do treści na SO.Odpowiedzi:
Powołanie
w wierszu poleceń podaje pomoc na temat tej składni (której można również użyć poza FOR, jest to tylko miejsce, w którym można znaleźć pomoc).
Można użyć różnych liter, takich jak
f
„pełna nazwa ścieżki”,d
litera dysku,p
ścieżka i można je łączyć.%~
jest początkiem każdej z tych sekwencji, a liczbaI
oznacza, że działa on na parametrze%I
(gdzie%0
jest pełna nazwa pliku wsadowego, tak jak zakładałeś).źródło
I
. Muszę użyć0
zamiastI
. Nie wiem, czy coś przeoczyłem, ale po prostu daję znać ludziom.I
jest symbolem zastępczym dla indeksu zmiennej.0
= plik wywołujący,1
= argument nr 1,2
= argument nr 2 itp.(Po pierwsze, chciałbym polecić tę przydatną stronę referencyjną dla partii: http://ss64.com/nt/ )
Potem jeszcze jedno przydatne wyjaśnienie: http://htipe.wordpress.com/2008/10/09/the-dp0-variable/
I bardziej jasne odniesienie stąd :
%CmdCmdLine%
zwróci cały wiersz poleceń przekazany do CMD.EXE%*
zwróci pozostałą część wiersza poleceń, zaczynając od pierwszego argumentu wiersza poleceń (w Windows NT 4% * obejmuje również wszystkie spacje wiodące)%~dn
zwróci literę dysku% n (n może wynosić od 0 do 9), jeśli% n jest prawidłową ścieżką lub nazwą pliku (bez UNC)%~pn
zwróci katalog% n, jeśli% n jest prawidłową ścieżką lub nazwą pliku (brak UNC)%~nn
zwróci tylko nazwę pliku% n, jeśli% n jest prawidłową nazwą pliku%~xn
zwróci rozszerzenie pliku tylko% n, jeśli% n jest prawidłową nazwą pliku%~fn
zwróci pełną ścieżkę% n, jeśli% n jest prawidłową nazwą pliku lub kataloguDODAJ 1
Właśnie znalazłem dobre referencje dla tajemniczego
~
operatora tyldy.%~
Ciąg nazywa procent tyldy operatora. Można go znaleźć w takich sytuacjach:%~0
.:~
Ciąg nazywa dwukropek tyldy operatora. Możesz to znaleźć jak%SOME_VAR:~0,-1%
.DODAJ 2 - 13:12 7/6/2018
%1-%9
odnoszą się do argumentów wiersza poleceń. Jeśli nie są one prawidłowymi wartościami ścieżki,%~dp1
-%~dp9
wszystkie rozwiną się do tej samej wartości co%~dp0
. Ale jeśli są poprawnymi wartościami ścieżki, zostaną rozwinięte do własnych wartości sterownika / ścieżki.Na przykład: (batch.bat)
Uruchom 1:
Uruchom 2:
źródło
Zmienna
%0
w skrypcie wsadowym jest ustawiona na nazwę wykonującego pliku wsadowego.~dp
Specjalna składnia pomiędzy%
i0
mówi zasadniczo rozszerzyć zmienną%0
pokazać literę dysku i ścieżkę, co daje bieżący katalog zawierający plik wsadowy!Pomoc = Link
źródło
%0
bezpośrednio w cmd bez zapisywania pliku .bat na lokalnym dysku twardym?% ~ dp0 rozwija się do bieżącej ścieżki katalogu działającego pliku wsadowego.
Aby uzyskać jasne zrozumienie, stwórzmy plik wsadowy w katalogu.
z zawartością:
Po uruchomieniu z wiersza polecenia zobaczysz następujący wynik:
źródło
Inną wskazówką, która bardzo by pomogła, jest to, że aby ustawić bieżący katalog na inny dysk , należy
%~d0
najpierw użyćcd %~dp0
. Spowoduje to zmianę katalogu na dysk pliku wsadowego, a następnie na jego folder.Alternatywnie, dla #oneLinerLovers, jak wskazał @Omni w komentarzach
cd /d %~dp0
, zmieni zarówno dysk, jak i katalog :)Mam nadzieję, że to komuś pomoże.
źródło
cd
ma wbudowany parametr, który przełączy zarówno dysk, jak i folder:cd /d %~dp0
/d
argument jest pomocny, ale zasługuje na to, aby zamieścić go jako alternatywną odpowiedź dla kandydata, a nie komentarz do tego. Dziękuję za zwrócenie na to uwagi, nie wiedziałem o tym :)Świetny przykład z przenośnego launchera Strawberry Perl:
Nie jestem pewien, co robi sam minus 1, ale to działa na ucztę!
źródło
Przykład byłby miły - oto banalny
wyświetla tylko ROZSZERZENIA każdego pliku w bieżącym folderze
dla bardziej przydatnych kombinacji zmiennych (wymienionych również w poprzedniej odpowiedzi) z monitu CMD wykonaj:
HELP FOR
który zawiera ten fragmentModyfikatory można łączyć, aby uzyskać złożone wyniki:
źródło