erro de associação do tipo de arquivo

1

eu mantenho minhas macros doskey em um arquivo separado com extensão de arquivo .macro e posso carregá-las usando doskey /macrofile=macros.macro para a sessão de console específica

Eu quero usar o recurso windows as da associação de tipo de arquivo para carregá-los sem precisar digitar o comando (o nome ou caminho do executável) sempre

por esse motivo eu uso dois comandos cmd.exe internos:

assoc .macro=macro
ftype macro="doskey /macrofile=%1"

não há erro, mas quando eu executo a mensagem pop-up aparece, e basicamente não funciona

anteriormente eu tentei associar .reg arquivos com reg import %1 e funcionou, o problema aqui parece ser o sinal de igual em doskey /macrofile= switch, eu acho que o sistema não pode lidar com isso

eu acho que, apesar de switches ( / ) e subcomandos após o nome do executável pode trabalhar com parâmetros, mas = de alguma forma não consegue fazê-lo

Então eu estou pedindo soluções:)

    
por w17t 24.11.2014 / 08:26

1 resposta

2

ftype divide seu argumento em "=" e não fornece meios para escapar do segundo caractere "=" no comando. Felizmente, esse comando apenas adiciona uma configuração de registro simples, que você pode adicionar manualmente usando reg em um prompt de comando elevado:

assoc .macro=macrofile
set k=HKLM\Software\Classes\macrofile\shell\open\command
set d="\"%SystemRoot%\system32\doskey.exe\" /macrofile=\"%1\""
reg add %k% /f /ve /d %d%

Ou crie um arquivo .reg que possa ser importado com regedit ou reg :

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\Software\Classes\.macro]
@="macrofile"

[HKEY_LOCAL_MACHINE\Software\Classes\macrofile]

[HKEY_LOCAL_MACHINE\Software\Classes\macrofile\shell]

[HKEY_LOCAL_MACHINE\Software\Classes\macrofile\shell\open]

[HKEY_LOCAL_MACHINE\Software\Classes\macrofile\shell\open\command]
@="\"C:\Windows\system32\doskey.exe\" /macrofile=\"%1\""

Exemplo:

C:\>assoc .macro
.macro=macrofile
C:\>ftype macrofile
macrofile="C:\Windows\system32\doskey.exe" /macrofile="%1"

C:\>doskey /macros:all
[cmd.exe]

C:\>spam.macro
C:\>doskey /macros:all
[cmd.exe]
    spam=echo spam!

C:\>spam
spam!
    
por 23.12.2014 / 08:31