Cómo crear un archivo por lotes o un script para crear múltiples accesos directos a EXE

Cómo crear un archivo por lotes o un script para crear múltiples accesos directos a EXE

Hola, tengo alrededor de 122 carpetas con archivos ejecutables que coinciden con el nombre de la carpeta. ¿Hay alguna manera de escribir una secuencia de comandos para crear un acceso directo para cada archivo ejecutable dentro de las carpetas y sin la etiqueta de "acceso directo"? Solo trato de evitar hacerlo 1 por 1 manualmente con algunas secuencias de comandos inteligentes...

Respuesta1

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

ver enlace mk /?

verss64.com enlace mk

ver cmd /?

ver por /?

ver directorio /?

verss64.com para hacer

verdesactivar/activar la extensión del nombre del acceso directo

verEnlaces simbólicos, enlaces duros y uniones de directorios en Windows 10

Cree un archivo por lotes cmd de Windows 10 que debe ejecutarse en una ventana con privilegios de administrador que creará un acceso directo a cada archivo .exe en un volumen si se coloca en la carpeta raíz, y a cada archivo .exe en una carpeta y todas las subcarpetas si no colocado en la raíz. la extensión "acceso directo" no debe ser parte del nombre del archivo. la extensión .lnk debe ser parte del nombre del archivo. Los enlaces que ya existen a archivos .exe deben eliminarse.

Respuesta2

Mi método de referencia para la creación de accesos directos es crear un script VB temporal dentro del lote. Su solución puede verse así:

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

)

Esto establece variables tanto para dónde desea sus accesos directos ( deses decir, si los desea en su %USERPROFILE%\Desktopcarpeta o en alguna otra) como para dónde se encuentran sus archivos ejecutables ( src). Tenemos que setlocal enabledelayedexpansionhacerlo para poder usar variables en nuestro bucle for, que es: fortodos los ejecutables ( *.exe) ubicados en nuestro srcdirectorio, configurar la ruta completa del .exe como exey luego configurar el nombre del .exe como name(no incluir extensión). La siguiente parte es el script VB: configuramos SCRIPTun archivo .vbs con nombre aleatorio en nuestra carpeta TEMP, luego hacemos eco de nuestros comandos VBS en ese script, lo ejecutamos y lo eliminamos. Esto sucederá para cada iteración de su bucle for hasta que haya creado un acceso directo para cada ejecutable.

Cosas importantes a tener en cuenta sobre las líneas VBS: sLinkFiledetermina dónde se crea el acceso directo y cómo se llama; oLink.TargetPathhace referencia a la ruta completa de su ejecutable; !'s se utilizan en lugar de %'s para variables en el bucle for; y cuando hacemos eco de los paréntesis en el archivo VBS, se les debe agregar un carácter de escape ^. Con suerte, esto hará exactamente lo que desea: solo debería requerir que configure las variables desy src.

Respuesta3

No puedo resistirme a publicar elPotencia Shellversión:

$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 {}

información relacionada