EXE에 대한 다중 바로가기를 생성하는 배치 파일 또는 스크립트를 생성하는 방법

EXE에 대한 다중 바로가기를 생성하는 배치 파일 또는 스크립트를 생성하는 방법

안녕하세요. 폴더 이름과 일치하는 exe 파일이 포함된 폴더가 약 122개 있습니다. 폴더 내에서 '바로가기' 태그 없이 각 exe에 대한 바로가기를 생성하는 스크립트를 작성하는 방법이 있습니까? 영리한 스크립트를 사용하여 수동으로 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을 위해

보다바로가기 이름 확장자 끄기/켜기

보다Windows 10의 심볼릭 링크, 하드 링크 및 디렉터리 접합

루트 폴더에 있는 경우 볼륨의 모든 .exe 파일에 대한 하드 바로 가기를 생성하고, 폴더 및 모든 하위 폴더에 있는 모든 .exe 파일에 대한 하드 바로 가기를 생성하는 관리자 권한으로 창에서 실행해야 하는 Windows 10 cmd 배치 파일을 빌드합니다. 루트에 배치되지 않습니다. "바로가기" 확장자는 파일 이름의 일부가 되어서는 안 됩니다. .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에 바로가기를 원하는 경우 )와 실행 파일이 있는 위치( ) 모두에 대한 변수를 설정합니다. for-loop에서 변수를 사용할 수 있도록 해야 합니다 . 즉, 디렉토리 에 있는 모든 실행 파일( ) 을 사용하고 .exe의 정규화된 경로를 로 설정한 다음 .exe의 이름을 ( 확장자 포함). 다음 부분은 VB 스크립트입니다. TEMP 폴더에 무작위로 이름이 지정된 .vbs 파일을 설정한 다음 VBS 명령을 해당 스크립트에 반영하고 실행하고 삭제합니다. 이는 각 실행 파일에 대한 바로 가기가 생성될 때까지 for 루프를 반복할 때마다 발생합니다.%USERPROFILE%\Desktopsrcsetlocal enabledelayedexpansionfor*.exesrcexenameSCRIPT

VBS 라인에 관해 주의할 중요한 사항: sLinkFile바로가기가 생성되는 위치와 이름을 결정합니다. oLink.TargetPath실행 파일의 전체 경로를 참조합니다. for 루프의 변수에는 ' !대신 '이 사용됩니다 . %그리고 VBS 파일에 괄호를 표시할 때 괄호를 ^. 이것이 여러분이 원하는 것과 정확히 일치하기를 바랍니다. dessrc변수만 설정하면 됩니다.

답변3

게시하는 것을 거부할 수 없습니다.파워셸버전:

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

관련 정보