Przypadkowo wpisałem to polecenie w dużym katalogu roboczym i otrzymałem następujący wynik:
d:\prog>move ^<
10 file(s) moved.
Czy ktoś może wyjaśnić, co właśnie zrobiłem? Nie mam pojęcia :/
Uwaga:
Wydaje się, że dzieje się tak tylko wtedy, gdy w katalogu znajdują się pliki z tylko rozszerzeniem (i bez nazwy) .a
.
windows
cmd.exe
command-line-arguments
Gugyin Adrián
źródło
źródło
move ^<
było kompletne polecenie? Otrzymuję komunikat „Nazwa pliku, nazwa katalogu lub składnia etykiety woluminu jest nieprawidłowa”. z tym poleceniem..a
. Mogę to odtworzyć. W rzeczywistości nic nie porusza ... dochodzenia są kontynuowane<
jest to polecenie przekierowujące dla standardowego wejścia.^
jest znakiem ucieczki, więc^<
oznacza dosłowny<
znak. Takmove ^<
powinno oznaczać przenieść plik o nazwie<
w bieżącym katalogu. Nie<
jest to jednak poprawna nazwa pliku ...Odpowiedzi:
Używasz symbolu wieloznacznego, więc pasujące pliki zostaną przeniesione. Dokumentacja Microsoft (łącza u dołu) stwierdza
Twoje polecenie „przenosi” (ponieważ folder docelowy jest taki sam jak źródło, nie ma rzeczywistej operacji przenoszenia) pliki bez rozszerzenia, to znaczy, że twoje polecenie jest równoważne z
move *.
Teraz następne pytanie powinno brzmieć:
^<
(lub po prostu"<"
) wybiera pliki bez rozszerzenia, dlaczego.a
plik, który nie ma nazwy, ma tylko rozszerzenie, zostaje wybrany?Odpowiedzią są krótkie nazwy . Wybór symboli wieloznacznych działa na długie i krótkie nazwy plików. Jeśli spróbujesz
dir /x
wyświetlić listę krótkich nazw plików, prawdopodobnie zobaczysz, że krótka nazwa.a
pliku nie ma rozszerzenia.Więcej informacji
Algorytm ustalania, czy znak jest symbolem wieloznacznym
Algorytm określania, czy nazwa pliku znajduje się w wyrażeniu
źródło
dir ^>
pasujea.
?^>
i">"
dopasuj wszystkie pliki z jednym znakiem w nazwie i bez rozszerzenia. Jeśli nazwa zawiera kropkę (nie separator rozszerzenia), wówczas nazwa pliku ma dwa znaki i nie jest dopasowana.