¿BUG? não pode criar arquivo com '=' via linha de comando ECHO e COPY CON

0

ONDE está a documentação que explica o comportamento aparentemente anormal do sinal de igual abaixo?

PASSOS PARA REPRODUZIR (em um prompt de comando):

exemplo com o 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

Notas:
arquivo c :

636465203D642E7478740D0A    
c d e   = d . t x t    

arquivo a-b.txt :

616263200D0A    
a b c     

NO ENTANTO (aqui o '=' torna-se parte dos nomes de arquivos válidos se eu usar aspas):

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

um sinal de igual é um caractere de nome de arquivo válido.

FWIW, parece que um '=' não entre aspas tem um significado especial bizarro em uma linha de comando do DOS.

OTOH, o '=' é um caractere de nome de arquivo válido.

" Nomeando arquivos, caminhos e Namespaces "

usando o Windows 8.1

editar:

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

a sintaxe acima funciona.

finalizar edição.

edição # 2:

Michael Frank me ajudou a encontrar mais informações.

Suas informações permitiram que eu localizasse um artigo interessante do SO " cmd- vírgula para separar parâmetros Comparado ao espaço? "

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//

acima, vários caracteres são usados como delimitadores.

quando / foi usado como um delimitador acima, um / extra é emitido; isso seria um bug imho.

em " cmd- comma para separar parâmetros Comparado a espaço? ", Tim Robinson escreveu" no Windows, os programas são responsável por analisar suas próprias linhas de comando. O shell analisa redirecionamentos e canais, então passa o resto da linha de comando para o programa em uma string "

BOTTOM LINE: parece que quando um delimitador é necessário, = age como um delimitador; em alguns casos = causa um erro sintaxe , em outros casos = é simplesmente um sinal de igual .

final da edição # 2.

    
por gerryLowry 14.03.2016 / 01:33

1 resposta

0

O caractere = é um delimitador, funcionalmente, parece ser o mesmo que um espaço . Como você pode ver no exemplo abaixo:

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

c:\NotBackedUp>type d
abc efg.txt

Da mesma forma, = fará o mesmo:

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

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

Vamos dar uma olhada no seu primeiro comando: echo cde > c=d.txt

Ao iniciar, você chama o comando echo e passa um valor cde para inserir no arquivo c . Como = é um delimitador e você não disse a echo onde enviar a próxima string d.txt , o padrão é o arquivo anterior: c .

Você pode contornar isso citando seu nome de saída:

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

ou escapando do delimitador com ^ :

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

Ambos criarão um arquivo d=e.txt com o conteúdo abc .

Mais informações sobre Delimitadores

    
por 14.03.2016 / 01:51