Как создать пакетный файл или скрипт для создания нескольких ярлыков для EXE-файлов

Как создать пакетный файл или скрипт для создания нескольких ярлыков для EXE-файлов

Здравствуйте, у меня около 122 папок с exe-файлами во всех из них, которые соответствуют имени папки. Есть ли способ написать скрипт для создания ярлыка для каждого exe-файла в папках и без тега 'shortcut'. Просто пытаюсь избежать ручного создания 1 за 1 с помощью некоторых умных скриптов...

решение1

rem must be run in a window with admin privileges
rem windows 10 cmd batch file to create a hard shortcut to all .exe files on a volume if placed in the root folder; 
rem in a folder and all subfolders if not placed in the root folder. the shortcut is created in the folder where the .exe is.
rem the "shortcut" extension should not be part of the filename.  the .lnk extension should be part of the filename.  
rem links that already exist to .exe files should be deleted.
rem see mklink /? and https://ss64.com/nt/mklink.html
rem mklink saveShortcutAs targetOfShortcut
@echo off 
setlocal enableextensions
rem begin turn off shortcut name extension
rem see https://www.tenforums.com/tutorials/4663-shortcut-name-extension-turn-off-windows-10-a.html
REG ADD "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer" /V link /T REG_Binary /D 00000000 /F
Reg Delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\NamingTemplates" /V ShortcutNameTemplate /F
taskkill /f /im explorer.exe
start explorer.exe
rem end turn off shortcut name extension
rem the following command deletes all links to .exe files.          
FOR /f "tokens=*" %%a IN ('dir /b /s *.exe.lnk') DO del "%%a"
FOR /f "tokens=*" %%a IN ('dir /b /s *.exe') DO mklink /h "%%a.lnk" "%%a"
exit /b

см. mklink /?

видетьss64.com mklink

см. cmd /?

см. /?

см. каталог /?

видетьss64.com для в do

видетьвыключить/включить расширение имени ярлыка

видетьСимволические ссылки, жесткие ссылки и соединения каталогов в Windows 10

Создайте командный файл Windows 10 cmd, который необходимо запустить в окне с правами администратора, который создаст жесткий ярлык для каждого .exe-файла на томе, если он помещен в корневую папку, и для каждого .exe-файла в папке и всех подпапках, если он не помещен в корневую папку. Расширение «ярлык» не должно быть частью имени файла. Расширение .lnk должно быть частью имени файла. Ссылки, которые уже существуют на .exe-файлы, следует удалить.

решение2

Мой метод создания ярлыков — создание временного скрипта VB в пакете. Ваше решение может выглядеть примерно так:

@echo off

set "des=C:\Where\You\Want\The\Shortcuts"
set "src=C:\Root\Folder\Of\Executables"

setlocal enabledelayedexpansion
for /r "%src%" %%A in (*.exe) do (
    set "exe=%%A"
    set "name=%%~nA"

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

    echo Set oWS = WScript.CreateObject^("WScript.Shell"^) >> !SCRIPT!
    echo sLinkFile = "%des%\!name!.lnk" >> !SCRIPT!
    echo Set oLink = oWS.CreateShortcut^(sLinkFile^) >> !SCRIPT!
    echo oLink.TargetPath = "!exe!" >> !SCRIPT!
    echo oLink.Save >> !SCRIPT!

    cscript /nologo !SCRIPT!
    del !SCRIPT!

)

Это устанавливает переменные как для того, где вы хотите разместить ярлыки ( des- т. е. хотите ли вы их в своей %USERPROFILE%\Desktopили какой-либо другой папке), так и для того, где находятся ваши исполняемые файлы ( src). Нам нужно, setlocal enabledelayedexpansionчтобы мы могли использовать переменные в нашем цикле for - который: forвсе исполняемые файлы ( *.exe), расположенные в нашем srcкаталоге, задаем полный путь к .exe как exe, а затем задаем имя .exe как name(без расширения). Следующая часть - это скрипт VB - мы задаем SCRIPTкак некоторый файл со случайным именем .vbs в нашей папке TEMP, затем мы повторяем наши команды VBS в этом скрипте, запускаем его и удаляем. Это будет происходить для каждой итерации вашего цикла for, пока он не создаст ярлык для каждого исполняемого файла.

Важные моменты, которые следует отметить относительно строк VBS: sLinkFileопределяет, где создается ваш ярлык и как он называется; oLink.TargetPathссылается на полный путь к исполняемому файлу; !'s используются вместо %'s для переменных в цикле for; и когда мы выводим скобки в файл VBS, они должны быть экранированы с помощью ^. Надеюсь, это делает именно то, что вам нужно — вам нужно будет только задать переменные desи src.

решение3

Не могу удержаться и не опубликоватьPowerShellверсия:

$TopFolder = 'C:\FolderWithExeSubfolders'

Get-ChildItem -Path $TopFolder -Filter *.exe -File -Recurse | ForEach-Object -Begin {
    $WSHshell = New-Object -com wscript.shell
} -Process {
    ### Using the folder name as the base name for the shortcut. This allows you the
    ###    option of giving the folder a "display name" to be used.
    $NewLnkPath             = '{0}\{1}.lnk' -f $_.DirectoryName, $_.Directory.Name
    $NewShortcut            = $WSHshell.CreateShortcut($NewLnkPath)
    $NewShortcut.TargetPath = $_.FullName

    ### Optional
    ### $NewShortcut.Arguments        = <string>
    ### $NewShortcut.Description      = <string>
    ### $NewShortcut.Hotkey           = <string>
    ### $NewShortcut.IconLocation     = <string>
    ### $NewShortcut.WindowStyle      = <1|2|7>
    ### $NewShortcut.WorkingDirectory = <string>

    $NewShortcut.Save()
} -End {}

Связанный контент