Como criar um link para um executável que deve ser executado em sua própria pasta?

1

Eu tenho um programa dentro de uma pasta como abaixo. O objetivo é ter um link na pasta utilities para que eu possa chamá-lo de qualquer linha de comando.

C:\Utilities\Program\
                      program.exe
                      some.important.dll
                      some.important.ini

É possível criar um link, link simbólico ou link físico na pasta Utilitários que pode executar o arquivo como se ele estivesse dentro da pasta Programa? Quando eu crio o symlink, o programa não localiza seus arquivos dll / ini. Quando eu criar um .lnk, não posso executá-lo a partir da linha de comando apenas digitando "program", por exemplo. no PowerShell, cmd ou executar.

C:\Utilities\
             program         <--------- should be the link

Eu preciso do link porque o meu ambiente PATH incluirá somente a pasta Utilities, então eu não quero acrescentar uma nova pasta ao PATH toda vez que eu adicionar uma nova pasta Program, eu gostaria apenas de criar um novo [ hard / sym] link.

    
por natenho 16.08.2013 / 00:13

3 respostas

0

Se você criar um atalho, você usaria o campo "start in" no atalho para indicar a pasta em que ele deve ser executado.

Então, tente iniciar o programa.lnk e veja se isso funciona.

    
por 16.08.2013 / 01:31
0

Você pode tentar um arquivo em lote MS-Dos com o mesmo nome de arquivo (exceto a extensão) que o programa que deseja executar.

Por exemplo, C:\Utilites\Program.bat pode conter algo como:

C:\Utilities\Program\program.exe

ou

@start "" /D "%~dp0Program\" program.exe %*

Então, quando você CD para C:\Utilities , você simplesmente digite Program , e o arquivo original que você deseja lançar será lançado.

Você também pode programar o arquivo exe para ser iniciado de qualquer lugar usando o recurso DosKey . Se você optar por fazê-lo, talvez o artigo Este possa ajudá-lo a aprender para o fazer.

Há também a opção de criar links físicos / simbólicos para todos os outros arquivos no diretório original, além do arquivo exe.

Você também pode copiar (ou vincular) o programa e seus arquivos para o diretório System32. Como o DosKey, o último permitirá que você inicie o programa de qualquer lugar, mesmo no CMD / Run / PowerShell (mas não no Explorer).

    
por 16.08.2013 / 02:12
0

Infelizmente, não posso comentar as respostas. Então eu tenho que escrever um novo.
Se você quiser usar o comando para o programa nativo na linha de comando, então não use o comando @Start.

@"pathtofile/program.exe" %*

Com isso, todos os parâmetros são canalizados para o programa original e todas as saídas são canalizadas para a linha de comando de chamada. Com uma entrada do diretório do utilitário no caminho, você pode usá-lo em cmd, powershell e run-dialog.
Nesta resposta aqui , a técnica também é descrita.

PS: Apenas use .cmd em vez de .bat para diferenciar oticamente o atalho de um arquivo de lote normal. O uso é o mesmo.

EDIT: Após o teste, percebi que o programa chamado não reconhece os arquivos necessários na mesma pasta (como queria no abridor de perguntas). Assim, um script mais complexo (todo em lote) é necessário para mudar para a pasta programms e, em seguida, executar o comando und than do dir.

A única coisa que você precisa alterar no script é a variável progpath para o programa desejado. Claro que você pode pular todos os REM -commands também (apenas comentando o código).
Aqui está o roteiro:

@ECHO OFF

REM enable local variables
SETLOCAL

REM fullpath of program
SET progpath=C:\Dokumente und Einstellungen\Lukas Seidler\Desktop\notepad

REM save current direcory
SET currpath=%CD%

REM change to drive of prog
FOR %%I IN ("%progpath%") DO (%%~dI)

REM change to path of prog
FOR %%I IN ("%progpath%") DO (CD "%%~pI")

REM execute prog with optional parameters
FOR %%I IN ("%progpath%") DO ("%%~nxI" %*)

REM change to calling drive
FOR %%I IN ("%currpath%") DO (%%~dI)

REM change to calling path
FOR %%I IN ("%currpath%") DO (CD "%%~pnI\")

REM disable local variables
ENDLOCAL

REM EOF

Para criar facilmente o arquivo no diretório utilities, use outro script e coloque-o no diretório utilities (para facilitar o acesso). Eu chamei de makehortcut.bat. O uso é: makeshortcut "full\path\to\file" . Basta alterar a variável utilitypath para sua pasta.

@ECHO OFF
SETLOCAL
SET utilitypath=D:\Apps\CommonFiles
SET outfile="%utilitypath%\%~n1.cmd"
ECHO @ECHO OFF > %outfile%
ECHO SETLOCAL >> %outfile%
ECHO SET progpath=%~f1 >> %outfile%
ECHO SET currpath=^%%CD^%% >> %outfile%
ECHO FOR ^%%^%%I IN ("^%%progpath^%%") DO (^%%^%%~dI) >> %outfile%
ECHO FOR ^%%^%%I IN ("^%%progpath^%%") DO (CD "^%%^%%~pI") >> %outfile%
ECHO FOR ^%%^%%I IN ("^%%progpath^%%") DO ("^%%^%%~nxI" ^%%*) >> %outfile%
ECHO FOR ^%%^%%I IN ("^%%currpath^%%") DO (^%%^%%~dI) >> %outfile%
ECHO FOR ^%%^%%I IN ("^%%currpath^%%") DO (CD "^%%^%%~pnI\") >> %outfile%
ECHO ENDLOCAL >> %outfile%
ECHO done.

AVISO: Nenhuma verificação de argumentos é feita. Arquivos existentes são sobrescritos.

    
por 16.11.2013 / 21:10