Chcę pobrać nazwę pliku i przypisać ją do zmiennej, dzięki czemu będę mógł użyć jej dalej w skrypcie.
set directoryName = dir Docum?nt*
echo %directoryName%
Ale gdy tylko wykonam plik wsadowy, otrzymam tylko to.
D:\ >a.bat
D:\ >set directoryName = dir Docum?nt*
D:\ >echo
ECHO is on.
Jak mogę się upewnić, że mojej zmiennej przypisano wartość, tj. Nazwę katalogu, dzięki czemu mogę zacząć pisać dalszy skrypt.
mój a.bat
zawiera:
set directoryName=dir Docum?nt*
echo %directoryName%
Po usunięciu spacji:
D:\Workspace>set directoryName=dir Docum?nt*
D:\Workspace>echo dir Docum?nt*
dir Docum?nt*
Domyślam się, że zmiennej przypisano całą wartość wraz ze słowem kluczowym command zamiast wyników. Oczekuję, że dane wyjściowe będą nazwą katalogu, tj. Documentation
set directoryName=dir Docum?nt*
właśnie tak. Masz białe znaki, więc po prostu je usuń ... Daj mi znać, jeśli to pomoże, a dodam odpowiedź.Odpowiedzi:
Masz białe znaki przed i po znaku równości ustawienia zmiennej, po prostu usuń ją i użyj na przykład poniższej metody.
Źle
set directoryName = dir Docum?nt*
Poprawny
set directoryName=dir Docum?nt*
Niejawne dla pętli
Rekurencyjna pętla FOR
Dalsze zasoby
źródło
Jeśli chcesz ustawić nazwę katalogu, która pasuje
Docum?nt*
, to czego potrzebujesz to:Jeśli więcej niż jeden katalog pasuje do maski, otrzymasz tylko jedno dopasowanie. Jeśli potrzebujesz zmiennej do przechowywania listy pasujących katalogów, musisz użyć
for /f
.źródło
Bez odstępów.
Jeśli musisz użyć spacji w nazwach, umieść je w tym formacie:
To albo „” lub bez odstępów .
źródło
Oczekuję, że dane wyjściowe będą nazwą katalogu, tj.
Documentation
Nie dostaniesz
Documentation
jako wyjście, chyba że biegać polecenie zapisane w zmiennej.Użyj następującego pliku wsadowego (test.cmd):
Przykładowy wynik:
Dalsze czytanie
źródło