소프트웨어 PE 에서 바로 가기 생성 배치 파일에 대한 고찰
2022.08.28 22:04
안녕하십니까?
사용기 게시판에서 눈에 띄어 한두가지 시도해봅니다. 개선인지 아닌지를 몰라서 제목에 '고찰'이라 하였습니다.^^
얼마전 -0-님이 나눔해주신 PrincePE+.wim 으로 부팅해서 테스트 하였습니다.
X:\Windows\DeskLnk 폴더에 DeskLnk.cmd 와 Start_Menu.cmd 에서 바로 가기를 생성하는 부분에 대한 이야기입니다.
DeskLnk.cmd -관련성이 떨어진 부분은 생략하였습니다.-
@echo off
pushd %~dp0
:Tools
for %%a in ("X:\Tools\*.exe") do (
Shortcut.exe /f:"%USERPROFILE%\Desktop\%%~na.lnk" /a:c: /t:"X:\Tools\%%~na.exe" /w:X:\Tools
)
for /f "tokens=* usebackq" %%a in (`dir /b/ad "X:\Tools\"`) do (
for %%b in ("X:\Tools\%%~na\*.exe") do (
Shortcut.exe /f:"%USERPROFILE%\Desktop\%%~nb.lnk" /a:c: /t:"X:\Tools\%%~na\%%~nb.exe" /w:X:\Tools
))
exit
Start_Menu.cmd <- 서브폴더에 대한 아이콘 생성은 누락되어 있음.
@echo off
pushd %~dp0
:Tools
for %%a in ("X:\Tools\*.exe") do (
Shortcut.exe /f:"%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\%%~na.lnk" /a:c: /t:"X:\Tools\%%~na.exe" /w:X:\Tools
)
exit /b
위 두개 배치파일에서 큰 문제는 아니지만 몇가지 눈에 거슬리?는 부분이 있습니다.
- PE에서 모두 있을 것 같은데요. 실컴에서는 없는 %StartMenu% %Desktop% 환경 변수가 있습니다.
- /a:c: 옵션은 /a:c 로 쓰는 것이 맞을 것 같습니다.
- 서브 폴더에 있는 파일에 대해 바로 가기를 만들때 작업폴더가 X:\Tools 고정 되는 문제가 있습니다.
- 원하지 않은 아이콘 생성을 피하기 위해 단일 exe로 만들어야 하는 문제가 있는 것 같습니다.
단일 파일이 아닌 압축이 해제된 상태에서 exe를 걸러 내는 방법은 "읽기 전용" "숨김" 속성을 활용할 수 있겠습니다.
- PrincePE+.wim 처럼 작업표시줄 우측에 Tools 도구모음을 사용하는 경우에는,
- 바로 가기를 만들 파일을 제외한 모든 파일에 숨김 속성을 주어야 할 것 같고,
- 단순히 바탕화면이나 시작메뉴에 바로가기만 만든다면 숨길 exe에 읽기 전용 속성을 주는 방법도 좋을 듯 싶습니다.
이러 것을 고려하여 다음처럼 수정할 수 있을 것 같습니다.
- 숨김 속성을 설정했으면 dir 옵션중에 /a-h 사용, 읽기 전용 속성을 주었으면 /a-r 사용해야 합니다.
- /w:"%%~dpa 끝에 쌍따옴표 없이 사용합니다. 임으로 추가하지 마십시오.
DeskLnk.cmd
@echo off & pushd %~dp0
:Tools
for /f "tokens=*" %%a in ('dir "X:\Tools\*.exe" /b/a-h/s') do Shortcut.exe /f:"%Desktop%\%%~na.lnk" /a:c /t:"%%~fa" /w:"%%~dpa
exit /b
Start_Menu.cmd
@echo off & pushd %~dp0
:Tools
for /f "tokens=*" %%a in ('dir "X:\Tools\*.exe" /b/a-h/s') do Shortcut.exe /f:"%StartMenu%\%%~na.lnk" /a:c /t:"%%~fa" /w:"%%~dpa
exit /b
두개가 목적지만 다르고 같은 문법이라서 한발 더 나가 서브 프로시저로 수정해봅니다.
- 소스 폴더와 목적 폴더만 주어지면 쉽게 원하는 결과를 얻을 수 있을 것 같습니다.
@echo off & pushd %~dp0
call :LNK "X:\Tools" "%StartMenu%"
call :LNK "X:\Tools" "%Desktop%"
exit /b
:LNK
for /f "tokens=*" %%a in ('dir "%~1\*.exe" /b/a-h/s') do shortcut.exe /f:"%~2\%%~na.lnk" /a:c /t:"%%~fa" /w:"%%~dpa
exit /b
결론은 서브 폴더 구성과 숨김 속성을 활용하면 좀 더 복잡한 파일/폴더 구성이 허용될 수 있다는 것입니다.
이미 PE 고수분들의 충분한 검토하에 만들어진 것인데 헛다리를 짚고 있는지도 모르겠습니다. ^^;
댓글 [17]
-
cungice 2022.08.28 22:34
-
슈머슈마 2022.08.28 22:58
Shortcut 구문
/F:filename : .LNK 바로 가기 파일을 지정합니다.
/A:action : 수행할 작업(C=만들기, E=편집 또는 Q=쿼리)을 정의합니다.
/T:target : 바로 가기가 가리키는 대상 경로와 파일 이름을 정의합니다.
/P:parameters : 대상에 전달할 명령줄 매개 변수를 정의합니다.
/W:working dir : 대상이 시작하는 작업 디렉터리를 정의합니다.
/R:run style : 창 상태(1=보통, 3=최대, 7=최소)를 정의합니다.
/I:icon,index : 아이콘과 선택적 인덱스(file.exe 또는 file.exe,0)를 정의합니다.
/H:hotkey : 단축키의 숫자 값인 단축키를 정의합니다.
/D:description : 바로 가기에 대한 설명(또는 주석)을 정의합니다.
@echo off & pushd %~dp0
call :LNK "X:\Tools" "%StartMenu%"
call :LNK "X:\Tools" "%Desktop%"
exit /b
:LNK
for /f "tokens=*" %%a in ('dir "%~1\*.exe" /b/a-h/s') do shortcut.exe /f:"%~2\%%~na.lnk" /a:c t:"%%~fa" /w:"%%~dpa
/W:working dir : 대상이 시작하는 작업 디렉터리를 정의합니다.
w옵션은 대상 디렉토리를 정의 하는데 디렉토리 경로에 공백이 생길 경우 문제는 안되는지요?
요기에 대해서 궁금한점이 있습니다.
%StartMenu% 어디 환경 변수? 인가요 뭔지 모르겠음
%Desktop% 뭔지 모르겠고
두번째 인수인데 ini 파일?
/w:"%%~dpa
요부분은 ?? " " 처리가 " 한게만 되어 있을때 테스트를 안해봐서 -_- 가능한가? 공백 있으면 안될거 같은데
/w:"%%~dpa" 이렇게 해야 하지 않을까요?
시작메뉴 경로 변수는
%ProgramData%\Microsoft\Windows\Start Menu\Programs
%AppData%\Microsoft\Windows\Start Menu\ProgramsPE에서는 경로 변수 가능 한가요? 저는 PE를 만들어 보지 않아서 모르겠네요아무튼 %startmenu% 만 변수 처리 할려면(set startmenu=) 라든가 ini 에서 불러오기 식으로 변수 처리되면 모르겠지만 -
지후빠 2022.08.28 23:28
본문에 언급하였듯이 %StartMenu% %Desktop% 는 PE에만 있는 환경변수입니다.ㅜㅜ
/w:"%%~dpa 는 끝이 \로 끝나는 특성 때문에 그런 것 같습니다. \" 로 하면 쌍따옴표가 두개 들어갑니다.^^
\ 문자가 escape 문자로 인식되어서 생긴 문제로 /w:"%%~dpa\" 이렇게 할 수 도 있겠습니다.
-
왕초보 2022.08.28 23:04
exe 파일이 여러개인 경우 exe 파일을 검색해서 바로가기 만들때의 문제점을 완전히 해결을 해주셨네요
아이디어를 알려주셨는데도..시도도 못하고 있었습니다..
이렇게 완성본까지 만들어 주셔서 감사합니다..
열공을 해야할것 같습니다..
--------------------------------------------------------------------------------------------------------------------------------
본문 소스에 오타가 있습니다
1. 본문에 있는 소스를 복사해서 활용을 할수 밖에 없어서 아래 부분을 복사를 했습니다..아래 네모 부분에 오타가 있습니다
2. 복사한 소스로 cmd 실행시 에러가 발생을 합니다
3 / 를 추가후..정상적으로 바로가기를 만들었습니다
4. 바탕화면에 바로가기가 잘 만들어졌습니다
5. 지후빠님 덕분에 원하는것을 얻게되었습니다..숨김파일로 한 exe는 바로가기가 만들어 지지않았습니다.
오랜 소원이 성취가 되었습니다..감사합니다
6. 숨김파일 속성을 확인하였습니다
7. 저는 폴더 찾기가 귀찮아서..폴더에 cmd를 넣고 사용하는 스타일이어서 이렇게 테스트를 해보았습니다
8. Shortcut.exe 파일이 x64 버전이 없어서 x64 전용 PE에는 사용을 할수가 없어서 저의 경우 pecmd.exe를 활용을 하고 있습니다
바로가기 만들기 명령어가 짧아져서 좋은점도 있습니다..만들기 속도는..잘 모르겠습니다.
좋은 지식을 아낌없이 베풀어 주셔서 감사합니다
복 많이 받으십시요
-
지후빠 2022.08.29 05:29
앗! 오타가 있었네요.ㅜㅜ 이렇게 빠른 피드백과 오류까지 잡아주셔서 감사드립니다. ^^
가상에 PE iso로 부팅했는데 usb를 붙이지 못해 사용한 배치파일을 복사를 못하고 어쩔수 없이
타이핑을 해서 옮겼는데 빠뜨린 것이 있었습니다. 죄송합니다. 본문 수정하겠습니다.
cmd 파일이 있는 폴더를 기준으로 할때는 그냥 ('dir *.exe /b/a-h/s') 처럼 단순하게 해볼 수 있을 것 같습니다.^^
for /f "tokens=*" %%a in ('dir *.exe /b/a-h/s') do Shortcut.exe /f:"%~1\%%~na.lnk" /a:c /t:"%%~fa" /w:"%%~dpa\"
본문의 서브 프로시져를 다음처럼 호출해도 되겠습니다. 첫번째 인수를 현재 디렉토리인 점(.)을 넘겨줍니다.
call :LNK . "%StartMenu%"
call :LNK . "%Desktop%"
-
왕초보 2022.08.29 09:42
지식에 깊이가 있으신분은 역시 다르시네요
필요한것을 구글에서 찾아서복사하는 정도여서..알려주신 소스를 열심히 보고서야 이해를 했습니다
좋은것을 배웠습니다..감사합니다
pushd %~dp0 이것이 있어서..현재 위치가 cmd 파일 위치네요 ('dir *.exe /b/a-h/s') 바로 dir을 하면 되는것으로 이해를 했습니다
1. 잘되는것을 알지만 배운적을 확인하는 차원에서 바로 적용하여 본 모습입니다..
2. wim파일 용량을 줄이려고 SysWOW64 폴더를 삭제한 x64 전용 PE를 고려해서 바로가기는 pecmd.exe를 활용하고 있습니다
실제는 모든 프로그램 폴더인 %Program%에 바로가기를 만들지만 확인을 위해서 바탕화면에 만들어 보았습니다
바로가기 파일을 모든 프로그램에 폴더에만 만들고 wim안에 있는 프로그램 바로가기들때문에 바탕화면에는 바로가기 파일을
복사해서 보여주고 있습니다..그래서 저의 경우 한곳에만 바로가기를 만들면 되어서 아래처럼 간단해 졌습니다
알려주신 방법을 잘 활용을 하도록 하겠습니다
pecmd.exe 명령어가 이미 알고 있는것어이서 이해가 되고 간단해보입니다
바로가기 만들기 속도는 Shortcut.exe가 조금 빠른것 같은 느낌입니다..
새로운 한주가 시작되었습니다..좋은일만 있으시길 바랍니다
@echo off & pushd %~dp0
for /f "tokens=*" %%a in ('dir *.exe /b/a-h/s') do pecmd.exe LINK %Desktop%\%%~na,%%~fa
exit
-
지후빠 2022.08.29 10:13
감사합니당~ 확인까지 해주시다니...
PE에 대한 지식이 없어서 pecmd 에 좋은 명령어가 있군요. 참고하겠습니다.
문법이 pecmd.exe LINK (만들바로가기경로),실행파일경로 형태가 맞으면... 본문에 추가하겠습니다. ^^
-
왕초보 2022.08.29 10:40
예..맞습니다...바로가기 파일 이름에 .lnk를 붙일 필요가 없습니다..
-
지후빠 2022.08.29 11:37
넵, 일단 본문에 추가하였습니다. 퇴근 후 확인 테스트 하겠습니다. ^^
잘 됩니다. 감사합니다. ^^
-
슈머슈마 2022.08.29 01:32
그렇군요
감사합니다.
난 뭔가 잘못된줄 알아씁니다. -
상발이 2022.08.29 06:18
수고하셨습니다.
-
두손모아 2022.08.29 20:14
감사합니다 ^^
-
천사케이 2022.08.30 01:13
감사합니다
-
빠송 2022.08.30 16:06
수고 많이 하셨습니다.
-
메아리 2022.08.30 21:40
감사합니다.
-
DengJang 2023.07.14 00:21
이 좋은 팁을 이제야 봅니다.ㅜㅜ
아주 잘 됩니다. 정말 감사합니다!
-
ghwp 2023.07.14 11:56
수고하셨습니다.
번호 | 제목 | 글쓴이 | 조회 | 추천 | 등록일 |
---|---|---|---|---|---|
[공지] | 강좌 작성간 참고해주세요 | gooddew | - | - | - |
4203 | 모 바 일| [팁] 스마트폰 스피커 물 빼기 [1] | asklee | 2726 | 2 | 09-19 |
4202 | 윈 도 우| 디펜더 전체검사때, CPU 100% 급상승 해결하기 [4] |
|
2409 | 8 | 09-16 |
4201 | 소프트웨어| VirtualBox 7.0.0 Beta - 새로운 기능 및 TPM 설정 [4] | VᴇɴᴜꜱGɪ | 1725 | 6 | 09-13 |
4200 | 소프트웨어| 드라이브 문자 할당/제거 배치파일 [17] | 지후빠 | 2070 | 23 | 09-12 |
4199 | 윈 도 우| 리소스 잡아먹는 Edge 설정 한방에 하기 [39] |
|
8049 | 30 | 09-06 |
4198 | 소프트웨어| Total Commander 10.5x 32비트 및 64비트용 확장 한국어 메... [12] | VᴇɴᴜꜱGɪ | 2280 | 18 | 09-05 |
4197 | 윈 도 우| 무인 마우스 포인터 이동, 키 터치 작동 파워셀 코드 [2] |
|
1270 | 6 | 09-03 |
4196 | 소프트웨어| Google Chrome에서 최소 탭 너비를 설정하는 방법 [1] | VᴇɴᴜꜱGɪ | 1474 | 8 | 08-30 |
4195 | 윈 도 우| 잘 안쓰는 window apps , 파워셀 명령어로 한번에 제거하기 [11] |
|
2879 | 12 | 08-29 |
» | 소프트웨어| PE 에서 바로 가기 생성 배치 파일에 대한 고찰 [17] | 지후빠 | 2209 | 25 | 08-28 |
4193 | 소프트웨어| 윈포 쪽지 전달 반자동화 AHK 매크로(배포중지) [39] | 지후빠 | 1748 | 31 | 08-23 |
4192 | 소프트웨어| True Image 실행 시 삭제한 백업 폴더가 다시 생성되는 문... [1] | 봄빛깔 | 1205 | 8 | 08-21 |
4191 | 윈 도 우| [실사] 만능WIM 응답파일(Unattend.xml) 교체 [33] | 무월 | 3000 | 30 | 08-21 |
4190 | 소프트웨어| Rufus를 사용하여 Windows 11 부팅 가능한 USB를 만드는 방법 [24] | VᴇɴᴜꜱGɪ | 4372 | 30 | 08-16 |
4189 | 소프트웨어| 간단한 파일/폴더 백업 배치 파일 - BackupToZip [29] | 지후빠 | 2697 | 27 | 08-14 |
4188 | 소프트웨어| 배치파일을 시스템 트레이로 숨김 실행하기 AHK [15] | 지후빠 | 1482 | 9 | 08-13 |
4187 | 소프트웨어| EasyDrv 활용법 [10] | 타천사둘리 | 3230 | 8 | 08-12 |
4186 | 기 타| 나스 토런트 감시폴더에 Torrent 파일 자동 전송 (수정) [1] | 슈머슈마 | 1217 | 9 | 08-11 |
4185 | 서버 / IT| Linux Mint 20.3 에서 Linux Mint 21로 업그레이드 [2] | VᴇɴᴜꜱGɪ | 909 | 7 | 08-09 |
4184 | 소프트웨어| X32dbg 이용한 언팩 강좌 입니다 [4] | 줄리아니 | 959 | 6 | 08-06 |
수고 많으셨습니다.