2

У меня есть программа внутри папки, как показано ниже. Цель состоит в том, чтобы иметь ссылку в папке утилит, чтобы я мог вызвать ее из любой командной строки.

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

Можно ли создать ссылку, символическую ссылку или жесткую ссылку в папке « Утилиты », которая может запускать файл, как если бы он находился внутри папки "Программа"? Когда я создаю символическую ссылку, программа не находит свои файлы DLL / INI. Когда я создаю .lnk, я не могу запустить его из командной строки, просто набрав "program", например, в PowerShell, cmd или Run.

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

Мне нужна ссылка, потому что PATH моего окружения будет включать только папку Utilities, поэтому я не хочу добавлять новую папку в PATH каждый раз, когда добавляю новую папку Program, я просто хочу создать новую [hard/sym ]ссылка на сайт.

4 ответа4

0

Это сработало для меня, когда я установил программу 7z и хотел использовать ее в командной строке:

  • Я установил 7z, затем создал ссылку на exe-файл и скопировал его в папку windows\system32.
  • Я создал файл 7z.bat и поместил в него одну строку: 7z.exe.lnk, и скопировал этот файл в папку windows\system32.

Затем он работает, как вы хотели. Вот пример (извините за датские окна):

0

Если вы создадите там ярлык, вы можете использовать поле "начать с" в ярлыке, чтобы указать папку, в которой он должен работать.

Затем просто попробуйте запустить program.lnk и посмотрите, работает ли это.

0

Вы можете попробовать командный файл MS-Dos с тем же именем файла (кроме расширения), что и программа, которую вы хотите выполнить.

Например, C:\Utilites\Program.bat может содержать что-то вроде:

C:\Utilities\Program\program.exe

или же

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

Затем, когда вы записываете CD на C:\Utilities , вы просто набираете Program и запускается оригинальный файл, который вы хотели запустить.

Или вы можете запрограммировать exe-файл для запуска из любого места, используя функцию DosKey . Если вы решите сделать это, возможно, эта статья поможет вам научиться делать это.

Существует также возможность создания жестких / символических ссылок на все другие файлы в исходном каталоге, в дополнение к exe-файлу.

Вы также можете скопировать (или связать) программу и ее файлы в каталог System32. Как и DosKey, последний позволит вам запускать программу из любого места, даже в CMD/Run/PowerShell (но не в Explorer).

0

К сожалению, я не могу комментировать ответы. Поэтому я должен написать новый.
Если вы хотите использовать команду для родной программы в командной строке, не используйте команду @Start.

@"pathtofile/program.exe" %*

При этом все параметры передаются в исходную программу, а все выходные данные передаются в вызывающую командную строку. С записью утилиты Directory в пути вы можете использовать ее в cmd, powershell и run-dialog.
В этом answere здесь, методика описана тоже.

PS: просто используйте .cmd вместо .bat, чтобы визуально отличить ярлык от обычного командного файла. Использование такое же.

РЕДАКТИРОВАТЬ: После тестирования я понял, что вызываемая программа не распознает необходимые файлы в той же папке (как хотелось бы из открывателя вопроса). Таким образом, требуется более сложный сценарий (все в пакете), чтобы перейти в папку программ, а затем выполнить und, а затем изменить dir.

Единственное, что вам нужно изменить в скрипте - это переменная progpath для требуемой программы. Конечно, вы также можете пропустить все REM команды (только комментируя код).
Вот сценарий:

@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

Для легкого создания файла в dir утилит используйте другой скрипт и поместите его в dir утилит (для быстрого доступа). Я назвал это makehortcut.bat. Использование: makeshortcut "full\path\to\file" . Просто измените переменную utilitypath на вашу папку.

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

ВНИМАНИЕ: Проверка аргументов не производится. Существующие файлы перезаписываются.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .