Como criar arquivo em lote ou script para criar vários atalhos para EXE

Como criar arquivo em lote ou script para criar vários atalhos para EXE

Olá tenho cerca de 122 pastas com exe's em todas elas que correspondem ao nome da pasta. Existe uma maneira de escrever um script para criar um atalho para cada exe dentro das pastas e sem a tag 'atalho'. Apenas tentando evitar fazer isso 1 por 1 manualmente com alguns scripts inteligentes...

Responder1

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

veja mklink /?

verss64.com mklink

veja cmd /?

ver para /?

veja diretório /?

verss64.com para fazer

verativar/desativar extensão de nome de atalho

verLinks simbólicos, links físicos e junções de diretório no Windows 10

Crie um arquivo em lote cmd do Windows 10 que deve ser executado em uma janela com privilégios de administrador que criará um atalho para cada arquivo .exe em um volume, se colocado na pasta raiz, e para cada arquivo .exe em uma pasta e todas as subpastas, se não colocado na raiz. a extensão "atalho" não deve fazer parte do nome do arquivo. a extensão .lnk deve fazer parte do nome do arquivo. links que já existem para arquivos .exe devem ser excluídos.

Responder2

Meu método preferido para criação de atalhos é criar um script VB temporário em lote. Sua solução pode ser mais ou menos assim:

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

)

Isso define variáveis ​​para onde você deseja seus atalhos ( desou seja, se você os deseja em sua %USERPROFILE%\Desktopou em alguma outra pasta) e onde seus executáveis ​​estão localizados ( src). Precisamos fazer setlocal enabledelayedexpansionisso para que possamos usar variáveis ​​em nosso loop for - que é: fortodos os executáveis ​​( *.exe) localizados em nosso srcdiretório, definir o caminho totalmente qualificado do .exe como exee, em seguida, definir o nome do .exe como name(não incluir extensão). A próxima parte é o script VB - definimos SCRIPTum arquivo .vbs com nome aleatório em nossa pasta TEMP, depois repetimos nossos comandos VBS nesse script, executamos e excluímos. Isso acontecerá para cada iteração do seu loop for até que ele tenha criado um atalho para cada executável.

Coisas importantes a serem observadas sobre as linhas VBS: sLinkFiledetermina onde seu atalho é criado e como ele é chamado; oLink.TargetPathfaz referência ao caminho completo do seu executável; !'s são usados ​​em vez de %'s para variáveis ​​no loop for; e quando ecoamos os parênteses no arquivo VBS, eles devem ser escapados com um ^. Esperamos que isso faça exatamente o que você deseja - requer apenas que você defina as variáveis des​​​​e src.

Responder3

Não resisto a postar oPowerShellversão:

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

informação relacionada