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.
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.
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.
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).
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.