Czy plik wsadowy systemu Windows może określić własną nazwę pliku?
Na przykład, jeśli uruchomię plik wsadowy C: \ Temp \ myScript.bat, czy w myScript.bat jest polecenie, które może określić ciąg „myScript.bat”?
windows
batch-file
cmd
djangofan
źródło
źródło
%0
jest tym, czego szukasz. Zobacz [to pytanie] [1] po więcej. [1]: stackoverflow.com/questions/357315/…Odpowiedzi:
Tak.
Użyj specjalnej
%0
zmiennej, aby uzyskać ścieżkę do bieżącego pliku.Napisz,
%~n0
aby uzyskać tylko nazwę pliku bez rozszerzenia.Napisz,
%~n0%~x0
aby uzyskać nazwę i rozszerzenie pliku.Można również napisać,
%~nx0
aby uzyskać nazwę pliku i rozszerzenie.źródło
cd
do katalogu i uruchomisz pakiet z tego miejsca,% 0 zwykle nie będzie zawierał informacji o ścieżce (ale w tym przypadku można je uzyskać z% cd%)%cd%
zwróci bieżący katalog procesu, który wywołał plik wsadowy. Tak więc, jeśli pojawi się monitD:\dir1
i wpiszY:\foo\bar.bat
, jeślibar.bat
ma,@echo %cd%
to wyświetli sięD:\dir1
.Możesz uzyskać nazwę pliku, ale możesz także uzyskać pełną ścieżkę, w zależności od tego, co umieścisz między „% ~” a „0”. Wybierz spośród
Np. Z wnętrza c: \ tmp \ foo.bat
%~nx0
daje "foo.bat", podczas gdy%~dpnx0
daje "c: \ tmp \ foo.bat". Zauważ, że elementy są zawsze montowane w kolejności kanonicznej, więc jeśli spodobasz się i spróbujesz%~xnpd0
, nadal otrzymasz „c: \ tmp \ foo.bat”źródło
f
jest to nazwa pliku, ale w przykładach używaszn
jako nazwy pliku. Po kilku testach wygląda na to, żef
jest to pełna ścieżka in
nazwa pliku.%~xnpd0
”… Kocham cię.Korzystając z poniższego skryptu, na podstawie odpowiedzi SLaks, ustaliłem, że prawidłowa odpowiedź to:
A oto mój skrypt testowy:
Co mnie interesuje, to to, że % nx0 nie zadziała, biorąc pod uwagę, że wiemy, że znak '~' jest zwykle używany do usuwania / przycinania cudzysłowów zmiennej.
źródło
Należy pamiętać, że
0
jest to specjalny przypadek numerów parametrów w pliku wsadowym, gdzie0
oznacza ten plik podany w wierszu poleceń .Więc jeśli plik to myfile.bat, możesz wywołać go na kilka sposobów w następujący sposób, z których każdy da inny wynik niż użycie
%0
lub%~0
:myfile
myfile.bat
mydir\myfile.bat
c:\mydir\myfile.bat
"c:\mydir\myfile.bat"
Wszystkie powyższe są połączeniami prawnymi, jeśli wywołasz je z właściwego względnego miejsca do katalogu, w którym istnieje.
%~0
usuwa cytaty z ostatniego przykładu,%0
ale nie.Ponieważ wszystkie one dają różne wyniki
%0
i%~0
jest bardzo mało prawdopodobne, aby były tym, czego faktycznie chcesz użyć.Oto plik wsadowy do zilustrowania:
źródło
Spróbuj uruchomić poniższy przykład, aby poczuć, jak działają magiczne zmienne.
Powiązane zasady są następujące.
źródło
Poniżej znajduje się mój kod początkowy:
Zauważyłem, że nazwa pliku podana przez% ~ 0 i% 0 jest sposobem, w jaki został wprowadzony w powłoce poleceń, a nie tym, jak faktycznie nazywa się ten plik. Więc jeśli chcesz użyć literału w nazwie pliku, powinieneś użyć% ~ n0. Jednak spowoduje to pominięcie rozszerzenia pliku. Ale jeśli znasz nazwę pliku, możesz dodać następujący kod.
Dowiedziałem się, że „: ~ 8,4%” oznacza rozpoczęcie od 9 znaku zmiennej, a następnie wyświetlenie kolejnych 4 znaków. Zakres wynosi od 0 do końca łańcucha zmiennej. Więc% Path% byłoby bardzo długie!
Jednak nie jest to tak rozsądne, jak powyższe rozwiązanie Joola (% ~ x0).
Moje dowody:
Oto ostateczny kod
źródło