Como eu escape de espaços para o comando ftype no Windows?

3

Eu criei um novo tipo de arquivo contendo espaços e especifiquei o comando open para ele:

assoc .php="PHP Script"
ftype "PHP Script"="c:\program files (x86)\php\php.exe" -f "%1" -- %~2

Até aqui tudo bem, mas agora não consigo verificar qual comando é usado para abrir arquivos desse tipo:

ftype "PHP Script"
File type 'PHP' not found or no open command associated with it.

Eu tentei usar o símbolo de acento circunflexo , sem efeito. Como obtenho o ftype para aceitar espaços para recuperar o comando atualmente em uso?

    
por x-yuri 09.06.2013 / 20:04

1 resposta

3

Você está fazendo errado. Primeiro, alguma leitura em segundo plano no MSDN:

Quando você usa assoc .ext=fileType , esse fileType é, na verdade, o ProgID . Como o último link acima afirma:

The proper format of a ProgID key name is [Vendor or Application].[Component].[Version], separated by periods and with no spaces, as in Word.Document.6. The Version portion is optional but strongly recommended.

A descrição do tipo de arquivo que você pode adicionar como um valor FriendlyTypeName no registro.

Por exemplo:

[HKEY_CLASSES_ROOT\.txt]
@="txtfile"
"PerceivedType"="text"
"Content Type"="text/plain"

Aqui .txt é obviamente a extensão e o valor (Padrão) é definido como ProgID, ou seja, txtfile .

[HKEY_CLASSES_ROOT\txtfile]
@="Text Document"
"FriendlyTypeName"="Text Document"

Aqui para o ProgID, temos o valor (Padrão) definido para a descrição do tipo de arquivo e o mesmo para FriendlyTypeName . Em geral, o último é usado para exibir recursos de cadeia localizados e deve ser formatado como uma cadeia indireta (um nome de arquivo completo e um valor de recurso precedido pelo símbolo @, por exemplo @%SystemRoot%\system32\notepad.exe,-469 para txtfile ) .

Eu não sei por que assoc e ftype permitem que você use espaços nas strings fileType / ProgID, já que isso vai contra as próprias diretrizes da MS. ProgIDs com espaços até funcionam corretamente se criados manualmente no registro (eu acabei de testar), mas significativamente não encontrei um único ProgID criado por qualquer programa que usa espaços. Estranho ainda é como ftype parece rejeitar espaços enquanto obtém dados (aspas não ajudam), enquanto não tem problemas em aceitá-los enquanto configura a cadeia de comando no primeiro lugar (as citações não são necessárias durante a configuração).

Meu palpite é que alguém esqueceu de informar o ftype devs dessa discrepância, porque eu não consegui descobrir uma maneira de fazer o comando recuperar a cadeia de comando que ela mesma havia definido anteriormente para um ProgID contendo espaços. Meu conselho? Atenha-se às diretrizes, não use espaços em ProgIDs e salve-se da dor de tentar descobrir as peculiaridades do Windows.

    
por 09.06.2013 / 20:46