Na przykład jaka jest alternatywa dla tego polecenia bez znaków cudzysłowu:
CD "c:\Documents and Settings"
Całkowitym powodem, dla którego nie chcę używać cudzysłowów, jest to, że to polecenie DZIAŁA:
SVN add mypathname\*.*
ale to polecenie NIE DZIAŁA:
SVN add "mypathname\*.*"
Problem polega na tym, że kiedy zmieniam mypathname dla ścieżki ze spacjami, muszę zacytować całość. Na przykład:
SVN add "c:\Documents and Settings\username\svn\*.*"
Ale gdy próbuję, pojawia się następujący komunikat o błędzie:
svn: warning: 'c:\Documents and Settings\username\svn\*.*' not found
Odpowiedzi:
Prawie wszystko działa dla mnie, ale może próbowałeś line5 .. ucieczki w przestrzeń za pomocą symbolu karetki (^)
Lub np. Poniżej, gdzie znacznik naprawdę robi różnicę.
Wygląda od dołu, jakby symbol karetki mógł być twoją odpowiedzią, patrz wiersz 3 poniżej.
źródło
Odkryłem, że umieszczanie cudzysłowów wokół tylko jednej części lokalizacji działa. W Twoim przypadku:
Chociaż używa to cudzysłowów, należy zauważyć, że gwiazdki znajdują się poza znakami cudzysłowu, więc nadal działają poprawnie.
źródło
Pomimo odpowiedzi dających złudzenie, że to działa, faktem jest, że nie można przekraść się w przestrzeni do zwykłych argumentów cmd. Łatwo to udowodnić:
Zapisz „
echo %1
” jakotest.bat
. Ten plik wsadowy wyświetli pierwszy argument, który przekazuje nam cmd.Teraz spróbuj uruchomić
test.bat
, ustawiając wartość%1
nafoo bar
. (Zwróć uwagę, że pomiędzyfoo
ibar
) jest znak spacji .)Próba i błąd przez kilka lat i zdaj sobie sprawę, że nie ma na to sposobu . Ludzie zasugerują ucieczkę przy użyciu
^
, aletest.bat foo^ bar
nie wyjdąfoo bar
.Tak więc nie ma sposobu, aby uzyskać wynik
foo bar
, a najbliższe, co możemy uzyskać, to uruchomienie,test.bat foo" "bar
które produkujefoo" "bar
lub uruchomienie,test.bat "foo bar"
które produkuje"foo bar"
.Teraz powód inne odpowiedzi pojawiają się do pracy jest, bo
cd
ma swój własny dodatkowy parsowanie, rozbieżne z zachowaniem zwykłej kłótni przechodzącej (zwykły%1
,%2
,%3
i etc w typowych plików wsadowych).Rozważmy na przykład osobliwe polecenie:
Dlaczego to działa? Wynika to z tego, że
cd
sam zrobił coś równoważnego z połączeniem 7 zwykłych argumentów w jeden logiczny. Zgodnie z normami przekazującymi argument cmd, widzimy 7 argumentów:c:\documents
and
settings
\some
folder
with
spaces
To tak, jakby
cd
połączył wszystkie 7 argumentów w jeden logiczny, robiąc coś podobnegoarray.join(" ")
, co tworzy ścieżkę:Zauważ, że to zachowanie jest specyficzne
cd
tylko dla (i niektórych innych funkcji). Nie ma to nic wspólnego ze zwykłym przekazywaniem argumentów.Rzeczywiście
cd
ma inną osobliwość. Pamiętasz, jak powiedzieliśmy powyżej, że nie możemy uzyskać danych wyjściowychfoo bar
? Najbliższym wyjściem, jaki możemy uzyskać, jest uruchomienie:który produkuje
foo" "bar
lub:który produkuje
"foo bar"
lub:który produkuje
"foo "bar
lub:który produkuje
foo" bar"
lub:który produkuje
"foo b"ar
lub:który produkuje
fo"o bar"
lub:który produkuje
fo"o ba"r
lub:który produkuje
"fo"o" bar"
lub:który produkuje
"f""o""o"" ""b""a""r"
, a nawet:który produkuje
""""f"""o""""o"" ""ba"""r""""""""""
.Wszystkie powyższe przykłady mają jedno podobieństwo, to znaczy, że wytworzą je
foo bar
po odcięciu"
znaków.cd
autor też musiał to zrozumieć ... gdybyśmy wywnioskowali zcd
osobliwego zachowania, które odcina wszystko,"
co otrzymuje , pozwalając na działanie wszystkich tych poleceń:cd c:\documents and settings
cd "c:\documents and settings"
cd "c:"\"documents and settings"
cd c:\"documents" "and" "settings"
cd c:\"docu"ments an"d set"tings"
cd c:"\"docu"ments an"d set"ti"""ngs
cd "c"":""\"docu"ments an"d set"ti"""ngs
cd "c"":""\"do""cu"me"nts a"n""d set"ti"""ngs
cd c"""":""""\"""d"""oc""""u"me"""""nt"s a"n""d set"""""""ti""""ngs
źródło
argv[]
lubGetCommandLine()
? pastebin.com/raw/t55iv0JSKrótka nazwa pliku wydaje się działać jak wiatr.
„E: \ Progra ~ 1 \ Java \ Eclipse \ eclipse.exe” -vmargs -Xms1024m -Xmx2048m
Do zwiększenia pamięci ..;)
źródło
Użyj krótkiej nazwy pliku 8.3. Na przykład:
źródło
Jeśli chodzi o wymianę 8.3, zwróć uwagę na dwie rzeczy:
c:\docume~1
Może więc wskazywać na:To nie jest bezpieczne, chyba że otrzymasz krótką nazwę i użyjesz jej w operacjach atomowych.
Chociaż zmieniają się bardzo rzadko, często nie istnieją.
Jeśli chcesz wiedzieć, czy dla określonego folderu / pliku istnieje 8.3, przetestuj go za pomocą parametru
/X
wdir
poleceniu lub obuduj go,for
aby uzyskać tylko tę część itp.Więcej informacji na temat włączania / wyłączania 8.3 w systemie plików NTFS można znaleźć w tym artykule pomocy technicznej Microsoft:
https://support.microsoft.com/en-us/help/121007/how-to-disable-8-3-nazwa-pliku- Tworzenie partycji NTFS
źródło
W ślad za postem @ Panga i innymi dyskutującymi o krótkich nazwiskach i pułapkach, oto sposób na dynamiczne rozwiązanie długiej nazwy na krótką nazwę:
Wtedy oczywiście możesz użyć krótkiej nazwy zamiast otaczających ją cudzysłowów.
źródło