¿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
,