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 /?
ver cmd /?
ver por /?
ver directorio /?
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 ( des
es decir, si los desea en su %USERPROFILE%\Desktop
carpeta o en alguna otra) como para dónde se encuentran sus archivos ejecutables ( src
). Tenemos que setlocal enabledelayedexpansion
hacerlo para poder usar variables en nuestro bucle for, que es: for
todos los ejecutables ( *.exe
) ubicados en nuestro src
directorio, configurar la ruta completa del .exe como exe
y luego configurar el nombre del .exe como name
(no incluir extensión). La siguiente parte es el script VB: configuramos SCRIPT
un 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: sLinkFile
determina dónde se crea el acceso directo y cómo se llama; oLink.TargetPath
hace 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 des
y 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 {}