2016-10-20 2 views
-1

Я использовал этот пакетный скрипт для создания ярлыка .exe, но также хочу получить имя .exe также динамически. В папке у меня есть командный файл, а также один файл .exe. Я хочу получить это имя .exe динамически в своем командном файле.Получить имя exe рядом с командным файлом

@echo off 

set SCRIPT="%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs" 

echo Set oWS = WScript.CreateObject("WScript.Shell") >> %SCRIPT% 
echo sLinkFile = "%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\Player111.lnk" >> %SCRIPT% 
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> %SCRIPT% 
echo oLink.TargetPath = "%CD%\Pacman.exe" >> %SCRIPT% 
echo oLink.Save >> %SCRIPT% 

cscript /nologo %SCRIPT% 
del %SCRIPT% 

Я хочу установить oLink.TargetPath динамически. Это будет путь, где пакетный файл находится вместе с именем .exe. Как я могу получить Pacman.exe, как указано в приведенном выше коде динамически? Помните, что в папке находится только один .exe.

+0

err, используйте '% 1','% 2' ... парные аргументы. Вот в чем вопрос? –

+0

что? У тебя вопрос? Я хочу установить динамически oLink.TargetPath с пустым и текущим exe рядом с командным файлом –

+0

'TYPE% SCRIPT% & pause' перед' del% SCRIPT% '. Затем измените свой вопрос и укажите строку 'oLink.TargetPath': что читать в настоящее время и что ** должно быть ** – JosefZ

ответ

1

Чтобы получить полный путь к .exe находится в родительском каталоге командный файл, используйте следующий код:

for %%F in ("%~dp0*.exe") do set "EXEFILE=%%~fF" 

(Примечание: для использования тока рабочий каталог т вместо замены %~dp0*.exe на %CD%\*.exe)

Наконец, замените строку echo oLink.TargetPath = "%CD%\Pacman.exe" >> %SCRIPT% на:.

echo oLink.TargetPath = "%EXEFILE%" >> %SCRIPT% 

Вот полный скрипт - также с некоторыми другими усовершенствованиями:

@echo off 

set "SCRIPT=%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs" 

for %%F in ("%~dp0*.exe") do set "EXEFILE=%%~fF" 

> "%SCRIPT%" (
    echo Set oWS = WScript.CreateObject^("WScript.Shell"^) 
    echo sLinkFile = "%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\Player111.lnk" 
    echo Set oLink = oWS.CreateShortcut^(sLinkFile^) 
    echo oLink.TargetPath = "%EXEFILE%" 
    echo oLink.Save 
) 

cscript //NoLogo "%SCRIPT%" 
del "%SCRIPT%" 
+0

спасибо комментарии explantion будет очень высоко оценен, что делать, если есть более одного exe –

+0

Зависит от того, что должно быть сделано в таких случаях : создать ссылку для каждого '.exe' (так что вы больше не можете использовать константу' .lnk') или выбрать определенный файл .exe (так что критерии поиска должны быть определены) ... – aschipfl

1

, чтобы получить имя файла в переменную (предполагая, что есть только один матч):

for %%a in ("%~dp0*.exe") do set "file=%%a" 
echo %file% 

, а затем

echo oLink.TargetPath = "%file%" >> %SCRIPT% 
+0

«& было неожиданным на этот раз» ошибка –

+0

@MohammadFaizanKhan, зависит от того, какой путь к вашей директории, я думаю ... – aschipfl

+0

@aschipfl, но ваш код не сделал эту проблему :) –

Смежные вопросы