¿BUG? невозможно создать файл с '=' через командную строку ECHO и COPY CON

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

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

пример с 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:

Michael Frank помог мне найти больше информации.

Его информация позволила мне найти интересную статью 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 ответ

Решение

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

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,

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

Другие вопросы по тегам