Где документация, которая объясняет явно аномальное поведение знака равенства ниже?

ШАГИ ДЛЯ РЕПРОДУКЦИИ (в командной строке):

пример с ECHO:

H:\BUGS>echo abc > a-b.txt
H:\BUGS>echo cde > c=d.txt
H:\BUGS>dir
2016-03-13  19:54  6 a-b.txt
2016-03-13  19:54 12 c
H:\BUGS>type a-b.txt
abc
H:\BUGS>type c
cde =d.txt

Заметки:
файл с:

636465203D642E7478740D0A    
c d e   = d . t x t    

файл ab.txt:

616263200D0A    
a b c     

ОДНАКО (здесь '=' становится частью действительных имен файлов, если я использую кавычки):

H:\BUGS>ren a-b.txt a=b.txt
The syntax of the command is incorrect.

H:\BUGS>ren a-b.txt "a=b.txt"
H:\BUGS>ren c       "c=d.txt"
H:\BUGS>dir
2016-03-13  19:54   6 a=b.txt
2016-03-13  19:54  12 c=d.txt

знак равенства является допустимым символом имени файла.

FWIW, кажется, что '=' не в кавычках имеет странное специальное значение в командной строке DOS.

OTOH, '=' является допустимым символом имени файла.

« Наименование файлов, путей и пространств имен »

используя Windows 8.1

редактировать:

H:\BUGS>echo def > "d=e.txt"
H:\BUGS>dir
2016-03-13  20:36 6 d=e.txt
H:\BUGS>type "d=e.txt"
def

Синтаксис выше работает.

конец редактировать.

редактировать № 2:

Майкл Франк помог мне найти больше информации.

Его информация позволила мне найти интересную SO-статью « cmd-запятая для разделения параметров по сравнению с пространством?"

H:\BUGS>type Frank.cmd
@echo %1/%2/%3

H:\BUGS>Frank 1 2 3
1/2/3

H:\BUGS>Frank 1=2=3
1/2/3

H:\BUGS>Frank 1;2;3
1/2/3

H:\BUGS>Frank 1,2,3
1/2/3

H:\BUGS>Frank 1/2/3
1/2/3//

в приведенном выше, различные символы используются в качестве разделителей.

когда / использовался в качестве разделителя выше, добавляется дополнительный / ; это было бы ошибкой imho.

в " cmd- запятая для разделения параметров по сравнению с пробелом?«Как пишет Тим Робинсон », в Windows программы отвечают за синтаксический анализ своих собственных командных строк.Оболочка анализирует перенаправления и каналы, а затем передает остальную часть командной строки программе в одну строку ».

НИЖНЯЯ ЛИНИЯ: кажется, что там, где необходим разделитель, = действует как разделитель; в некоторых случаях = вызывает синтаксическую ошибку, в других = просто знак равенства.

конец редактирования № 2.

1 ответ1

0

Символ = является разделителем, функционально он выглядит так же, как пробел , Как вы можете видеть в примере ниже:

c:\NotBackedUp>echo abc>d efg.txt

c:\NotBackedUp>type d
abc efg.txt

Аналогично, = сделает то же самое:

c:\NotBackedUp>echo abc>d=efg.txt

c:\NotBackedUp>type d
abc=efg.txt

Давайте посмотрим на вашу первую команду: echo cde > c=d.txt

Начиная с, вы вызываете команду echo , затем передаете ей значение cde для вставки в файл c . Поскольку = является разделителем, а вы не указали echo куда отправлять следующую строку d.txt , по умолчанию используется предыдущий файл: c .

Вы можете обойти это, либо указав свое выходное имя:

c:\NotBackedUp>echo abc>"d=e.txt"

или экранируя разделитель с помощью ^:

c:\NotBackedUp>echo abc>d^=e.txt

Оба из них создадут файл d=e.txt с содержимым abc .

Дополнительная информация о разделителях

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .