Например, что является альтернативой этой команде без кавычек:
CD "c:\Documents and Settings"
Причина, по которой я не хочу использовать кавычки, заключается в том, что эта команда работает:
SVN add mypathname\*.*
но эта команда НЕ работает:
SVN add "mypathname\*.*"
Проблема в том, что когда я меняю свое имя пути на путь с пробелами в нем, мне нужно процитировать все это. Например:
SVN add "c:\Documents and Settings\username\svn\*.*"
Но когда я пытаюсь это сделать, я получаю следующее сообщение об ошибке:
svn: warning: 'c:\Documents and Settings\username\svn\*.*' not found
Ответы:
Это почти все работает для меня, но вы, возможно, пробовали line5 ... выходя в пробел с символом каретки (^)
Или, например, ниже, где каретка действительно имеет все значение.
Снизу выглядит так, будто символ каретки может быть вашим ответом, см. Строку 3 ниже.
источник
Я обнаружил, что цитирование только одной части локации работает. В твоем случае:
Хотя при этом используются кавычки, важно отметить, что звездочки находятся за кавычками, поэтому они по-прежнему функционируют правильно.
источник
Несмотря на ответы, создающие иллюзию, что это работает, на самом деле вы не можете пробираться через пробелы в обычные аргументы cmd. Это легко доказать:
Сохранить "
echo %1
" какtest.bat
. Этот пакетный файл выведет первый аргумент, который нам передает cmd.Теперь попробуйте и запустите
test.bat
, установив значение%1
вfoo bar
. (Обратите внимание, что междуfoo
иbar
. Есть пробел )Методом проб и ошибок в течение нескольких лет и понимаем, что сделать это невозможно . Люди предложат избежать использования
^
, но неtest.bat foo^ bar
будут выводитьfoo bar
.Таким образом, нет никакого способа получить выходные данные
foo bar
, и самое близкое, что мы можем получить - это запуск,test.bat foo" "bar
который производитfoo" "bar
, или запуск,test.bat "foo bar"
который производит"foo bar"
.Теперь, причина , по которой другие ответы появляются на работу, потому что
cd
делает это собственный дополнительный синтаксический, расходящиеся от поведения обычного передачи аргумента (обычный%1
,%2
,%3
и т.д. в обычных пакетных файлов).Например, рассмотрим своеобразную команду:
Почему это работает? Это связано с тем, что он
cd
сам делает нечто эквивалентное объединению 7 обычных аргументов в один логический. Согласно нормам прохождения аргументов cmd, мы видим 7 аргументов:c:\documents
and
settings
\some
folder
with
spaces
Это как будто
cd
соединило все 7 аргументов в один логический, делая что-то похожееarray.join(" ")
, что приводит к пути:Обратите внимание, что это поведение свойственно
cd
только (и некоторым другим функциям). Это не имеет ничего общего с обычной передачей аргументов.Действительно,
cd
имеет еще одну особенность. Помните, мы говорили выше, что не можем получить выводfoo bar
? Ближайший вывод, который мы можем получить, запустив:который производит
foo" "bar
, или:который производит
"foo bar"
, или:который производит
"foo "bar
, или:который производит
foo" bar"
, или:который производит
"foo b"ar
, или:который производит
fo"o bar"
, или:который производит
fo"o ba"r
, или:который производит
"fo"o" bar"
, или:который производит
"f""o""o"" ""b""a""r"
, или даже:который производит
""""f"""o""""o"" ""ba"""r""""""""""
.Все приведенные выше примеры имеют одно сходство, которое они произведут
foo bar
после того, как мы урежем"
символы.cd
Автор, должно быть, тоже понял это ... если бы мы пришли к выводуcd
об особом поведении, которое обрезает все, что"
он получает , позволяя всем этим командам работать: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
источник
argv[]
илиGetCommandLine()
? pastebin.com/raw/t55iv0JSКороткое имя файла работает как ветер.
"E: \ Progra ~ 1 \ Java \ Eclipse \ eclipse.exe" -vmargs -Xms1024m -Xmx2048m
Для повышения памяти ..;)
источник
Используйте короткое имя файла 8.3. Например:
источник
Для тех, кто говорит о замене 8.3, обратите внимание на следующие две вещи:
Так что
c:\docume~1
можно указать на:Это небезопасно, если только вы не получите короткое имя и не используете его в атомарных операциях.
Хотя они очень редко меняются, часто они не существуют.
Если вы хотите узнать, существует ли 8.3 для определенной папки / файла, протестируйте его с параметром
/X
вdir
команде или инкапсулируйте его в a,for
чтобы получить только эту часть и т. Д.Подробнее о том, как включить / отключить 8.3 в NTFS, см. В этой статье службы поддержки Microsoft:
https://support.microsoft.com/en-us/help/121007/how-to-disable-8-3-file-name- создание-на-Ntfs-разбиения
источник
В продолжение поста @ Pang и других, обсуждающих короткие имена и подводные камни, вот способ динамически преобразовать длинное имя в короткое имя:
Тогда, очевидно, вы можете использовать короткое имя, а не окружающие кавычки.
источник