Passar argumentos de linha de comando para o Windows "Abrir com"


28

Eu tenho um programa que é aberto com um atalho específico, mas o atalho parece enviar parâmetros para o aplicativo. Se eu for diretamente para o diretório de destino e clicar duas vezes, ele não funcionará. No entanto, se eu usar a linha de comando e transmitir um determinado argumento, o aplicativo será aberto corretamente.

Quero abrir certos tipos de arquivo usando o aplicativo, mas o aplicativo deve ter os parâmetros ou ele não funcionará. É possível fazer esse tipo de coisa?


Qual versão do Windows você está usando?
— iglvzx

Estou usando o Windows 7.
— jtpereyda 28/11

1
Isso tem soluções melhores: superuser.com/questions/136133/… #

Respostas:


20

Encontrei o mesmo problema que o @jtpereyda e a solução do @bobbymcr também não funcionou para mim. Eu estava tentando obter todos os parâmetros da linha de comando passados ​​para os scripts node.js. sem precisar do node.exe no comando.

O problema é que, se você já associou o programa à extensão via Open Withcaixa de diálogo, criou uma associação de aplicativo, em vez de uma associação de extensão de arquivo, entre os dois. E as associações de aplicativos têm precedência.

Se você não se importa de editar o registro, pode modificar a (Default)chave no seguinte caminho:

HKEY_CLASSES_ROOT\Applications\node.exe\shell\open\command

Você deve substituir node.exepelo aplicativo que está ajustando.

Ou você pode simplesmente excluir a pasta do aplicativo HKEY_CLASSES_ROOT\Applicationscompletamente da pasta e sua ftypeassociação começará a funcionar.

Certifique-se de usar o %*que passará nos argumentos restantes não especificados da linha de comando ou nada. Se você "%2" "%3" "%4" "%5"receber 5 parâmetros de cadeia de caracteres vazios passados ​​para o seu aplicativo quando você não especificar nenhum argumento de linha de comando.

Finalmente, se você não concorda em modificar o registro manualmente, pode usar uma ferramenta de freeware do Nirsoft - FileTypesManager - http://www.nirsoft.net/utils/file_types_manager.html

As associações de arquivos aparecerão no topo da lista, sem nenhum texto na primeira coluna de extensão. Apenas encontre o nome do executável na lista e selecione-o para modificar o command linecampo para o opennome da ação.

No windows7, as alterações foram refletidas imediatamente sem nenhuma reinicialização ou reinicialização do aplicativo. No entanto, o utilitário Nirsoft possui um recurso para "Atualizar a área de trabalho" em qualquer modificação, o que me leva a acreditar que talvez o Vista ou as versões anteriores do SO armazenem em cache os dados. Nesse caso, o utilitário seria uma aposta melhor; caso contrário, talvez você precise fazer logoff e logon para ver as alterações.


1
como uma nota: parece que o% 1 sempre deve ser usado para passar o arquivo associado ao programa. usar diretamente% * parece não funcionar. Pelo menos eu tenho um problema com a minha associação ".pl" - perl na minha vitória 7
— vlad_tepesch 28/15

1
Consegui fazê-lo funcionar por tentativa e erro, resultando no seguinte valor de dados: "C:\Program Files\nodejs\node.exe" "%1"%*NOTA: o %*valor NÃO está entre aspas e não tem espaço entre ele e a aspas duplas anteriores.
— Michael Paulukonis

Também apaguei a chave HKEY_CLASSES_ROOT\.ulawno regedit, apenas no caso de .ulawextensão dos arquivos para os quais eu estava executando o procedimento.
— Matt

Como podemos passar os argumentos (digamos 'testing') durante a abertura?
— Aparição 20/01

Altere esta resposta para modificar explicitamente "[HKLM | HKCU] \ Software \ Classes", dependendo do contexto da instalação. Não modifique o HKCR diretamente. Consulte as "considerações importantes" para tipos de arquivo e o HKEY_CLASSES_ROOTartigo. É um equívoco compreensível dado muito do próprio antecede a documentação da Microsoft a exibição mesclada para HKCR que foi introduzido por volta de Windows 2000.
— Eryk Sun

10

Você pode fazer isso com assoce ftypeno prompt de comando. Abra um prompt de comando elevado e tente o seguinte:

ftype MyFileType = C: \ MyDir \ MyProgram.exe / arg1 / arg2 "% 1"
assoc .xyz = MyFileType

Isso associará a .xyzextensão MyProgram.exee passará a linha de comando /arg1 /arg2 [filename.xyz]para o programa para executá-la.


1
Aceito porque esta parece ser a resposta certa do que pesquisei. No entanto, esse processo parece ineficaz no sistema que estou usando. Posso usar ftype e assoc para verificar se as alterações foram aprovadas, mas isso não afeta o programa usado para abrir arquivos. Talvez o processo tenha mudado no Windows 7?
— Jtpereyda

Usar a resposta de Marcus Pope para fazê-lo funcionar corretamente do meu lado usando o Windows 7. Estava tentando reproduzir .ulawarquivos soxusando argumentos predefinidos. Observe que, além de excluir o aplicativo antigo, também excluí o HKEY_CLASSES_ROOT\.ulawque estava definindo o tipo de arquivo.
— Matt

CMDs assoce ftypesão comandos herdados. Eles não foram atualizados para as extensões para associações de arquivos adicionadas no Windows XP, 7 e 8. Eles modificam apenas as chaves de associação de arquivo e ProgId na chave do sistema "HKLM \ Software \ Classes". Eles não lêem ou modificam as configurações de HKCU por usuário, que têm precedência, ou as subchaves mais recentes, como "Aplicativos" e "SystemFileAssociations", ou as chaves de recursos por aplicativo de "RegisteredApplications". Eles também não leem ou modificam a opção do usuário em "HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts".
— Eryk Sun

3

A pessoa que faz a pergunta informa que a melhor resposta não funciona realmente.

Eu descobri isso no XP, o que pode se aplicar a sistemas operacionais posteriores.

Em um prompt do cmd, você precisa de dois comandos: assoc, ftype.

Esses dois podem mostrar o que está associado e, em seguida, editar a associação, mas há uma distorção, as instruções da MS parecem estar erradas / incompletas. Fui alertado para isso ao perceber um estilo de associação não documentado por aplicativos veteranos conhecidos, por quê?

Este exemplo permite que muitos argumentos sejam passados ​​para o programa associado.

ftype name_of_assoc="C\blah\aprog.exe" "%1" "%*"

Não é um erro de digitação "%1" "%*". A estrela percentual não funcionará sem a porcentagem anterior 1 .

E isso entra no ar imediatamente, sem necessidade de sair etc.

Feito à direita, passará 3 para arg []

myfile.wotsit file1 file2 file3

Ainda não o fizemos, mas as aspas externas a seguir passariam -m se o programa precisar de um sinalizador.

ftype name_of_assoc="C\blah\aprog.exe" -m "%1" "%*"

Eu não acho que isso esteja correto. O uso de aspas em torno de "% *" fará com que a lista de argumentos seja passada como um único argumento. Além disso, você perdeu os dois pontos após a letra da unidade. O comando correto deve ser: ftype name_of_assoc = "C: \ blah \ aprog.exe" -m "% 1"% *
— User0 7/16/16

Estou usando o excelente programa FilesTypeMan e, neste caso, você precisa %1 %* sem aspas !!! malditas janelas
— Jean-François Fabre

2

Eu tive um problema semelhante com uma versão mais antiga do PSP com Windows7

Esta solução (altere a linha de comando shell \ open \ no Registro) funcionou, mas tinha que ter a sintaxe "C: \ MyFolderName \ PSP.EXE"% 1 SEM CITAÇÕES% 1, caso contrário, isso será interpretado como uma constante


1
por que os votos negativos? esta resposta me ajudou a finalmente acertar o comando!
— ylka

OBRIGADO - Eu tinha as aspas e não estava funcionando
— Fiona - myaccessible.website 19/09

1

Não é a melhor solução, mas a mais fácil é usar um arquivo em lotes.

Crie um arquivo bat como esse e defina o programa padrão para sua extensão de arquivo. E sim, a citação vazia após o início é necessária:

{app name} .bat

    start "" "{app path}" %1 /edit

Exemplo:

BCompareEdit.bat

    start "" "C:\Program Files\Beyond Compare 4\BCompare.exe" %1 /edit

1
Esta é a única solução que funcionou para mim no Windows 10. Ajuda-me a iniciar o Word 2013 com a opção / w para ter uma nova instância em cada inicialização, necessária para usar o Word em áreas de trabalho virtuais.
— vicmortelmans

0

Aqui está uma extensão que parece fazer exatamente o que você deseja. Eu nunca o usei antes, mas parece ter boas críticas. deixe um comentário se houver problemas.


-1

Faça um atalho do Windows e use o seguinte modelo:

"C:\Windows\system32\mspaint.exe" "c:\data\basejpg.jpg" %1

2
E como o usuário usa isso para abrir um arquivo como xyz.jpg?
— G-Man diz 'Reinstate Monica'

Ele perguntou como alterar o registro para conseguir isso.
— rola
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.