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?

jtpereyda
fonte
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.

Marcus Pope
fonte
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.

bobbymcr
fonte
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" "%*"
Tim Channon
fonte
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

Denis
fonte
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
Xtro
fonte
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.

soandos
fonte
-1

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

"C:\Windows\system32\mspaint.exe" "c:\data\basejpg.jpg" %1
user835699
fonte
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