기 타 USORT.EXE 없이 CMD만으로 드라이브 문자,볼륨명 출력하기 사용기입니다
2021.11.09 14:50
먼저...좋은것을 알려주신 분께 감사드립니다...
어쩌면 이미 다 알고 있는것들인데도...생각이 굳어서인지..발상의 전환을 하지 못하였습니다
덕분에..X64 전용 PE에서는 USORT.EXE를 사용지 못하였는데..이제는..드라이브 문자와 볼륨명을 편하게 보여줄수 있게 되었습니다
항상 좋은일만 있으시길 바랍니다
USORT.EXE를 활용해서 이것을 해볼까 저것을 해볼까 고민하면서 활용을 하고 있을때...꺼꾸로 가신분이 있으시네요.
아래는 Win.tag 파일을 검사는 for문입니다..
USORT.EXE 를 알기전에는..이렇게 전체 드라이브를 모두 검사하는 방식을 사용했었습니다..USORT.EXE 를 사용하면서..잊고 있었네요
FOR %%a in (C D E F G H I J K L M N O P Q R S T U V W Y Z) do If exist %%a:\%sWinTag% (
Set /a iWinCnt+=1
Set Windrv=%%a
)
위의 방식에서 그냥 볼륨명만 추출하면..문자와 볼륨명을 보여줄수 있죠..알고 보면 간단한것이네요
이렇게 추출하는 경우 USORT.EXE 처럼 하드와 USB만 보여주는것은 되지 않습니다..CD가 있는 경우..이 정보까지 보여주게 됩니다
CD롬 구분은..WizApp 활용할때 배운것이 있습니다..echo CD > CD.txt 이렇게 파일을 만드는것이었습니다..
이 분은..폴더를 만들고 폴더 유무를 체크하는 방식을 사용하셨는데..직접확인해 보니까 이유가 있으셨네요.. CD여서 txt를 만들지 못할때 cmd창에
에러메세지가 나옵니다...
cmd 백업 프로그램의 경우 이 문구가 보이면 안되죠..또 하나 배웠습니다
USORT.EXE에서 드라이브 문자,볼륨명 추출해서 보여줄때와..cmd만으로 추출해서 보여줄때의 차이가..저는 잘 모르겠습니다
cmd가 조금 느린것 같기도 합니다..드라이브 갯수가 많지 않아서 그런지.비슷해 보입니다
드라이브 문자, 볼륨명을 보여주는 여러가지 방법중..이렇게 하는 방법도 있구나 하여주십시요
백업프로그램에 적용하면서..볼륨명 추출은..지후빠님의 소스를 활용하였습니다..
1. USORT.EXE 파일이 없어서..PE도 그동안 사용하지 못했던...x64 전용 PE를 활용할수가 있게 되었습니다..저에게 딱인 방법입니다
2. F:는..CD롬이 있고 H:는 빈드라이브 입니다..단순한 for문이면..빈 드라이브는 당연히 건너뛰지만..CD롬은 볼륨명을 추출하게 됩니다
3. cmd여서 이 런처를 활용하였습니다
4. F: CD롬을 제외한 다른 드라이브를 모두 보여줍니다.. USORT.EXE 에서는 하드가 아니어서..Z: 드라이브를 보여주지 않았는데..여기에서는 드라
이브가 존재하고 폴더를 만들수 있어서 이렇게 정보를 보여주네요..가상입니다.Z:에 백업을 해본적이 없습니다 혹시 백업을 해보신분이 있으신가요
5. pe에서도 확인을 해보았습니다..cmd에서 드라이브 유무와 폴더 만들기 유무만 체크를 해서 안될 이유가 없기는 합니다..
6. cmd에서 CD롬 유무 체크시 폴더 만들기를 활용하는것은 이미 히이이잌님께서 활용을 하고 계십니다
아래는 히이이잌님 cmd에서 이부분만 추출해서 CD롬이 M: 이어서 수정후 테스트 한것입니다..
폴더를 만들고 성공하지 못하면..readonly=1 이되고 만든 폴더를 삭제하는 과정있네요
7. M 드라이브가 CD롬이어서 첫번째 엑세스..문구는 만들지 못한 경우 메세지입니다..두번째줄은..없은데 삭제하는 명령이 있어서 나오는 메세지네요
cmd 창이 보이는 백업프로그램에서 이렇게 보이면 안되죠.
8. "1>nul 2>nul" 이것은 그대로 따라한것입니다..찾아보았더니 "명령 출력 무시 및 오류 메시지 무시" 저야 원하는 결과만 나오면 되어서..
폴더 만들기 실패해도 에러메세지 나오지 않습니다
그리고..폴더만들기 성공시에만..화면 출력과 폴더 삭제를 하도록 하였습니다.. 만들기 가능할때만 드라이브 문자, 볼류명을 보여주면 되죠.
9. M: 드라이브가 CD롬입니다..실패해서 아무것도 나오지 않았습니다
10. C: 드라이브로 테스트를 하여 보겠습니다
11. echo 한것만 출력이 되었습니다...하이이잌님 소스를 이렇게 활용을 하시면 될것 같습니다
12. 마무리
boot.wim용량을 줄이려고..SysWOW64 폴더없이 x64 전용으로 PE를 활용하는 경우..USORT.EXE 가 x86 버전이어서 아쉬움이 있었습니다
그래서 오토잇으로 된것을 따로 만들어 활용하기도 하였습니다만..그럴 필요가 없었네요..
좋은것을 알려주신 덕분에..또 하나 배웠습니다..잘 사용하겠습니다.
가장 기본적인것이지만..드라이브를 검사하는 for문을 사용하고..CD체크는..하이이잌님의 소스를 활용하고 볼륨명은..지후빠님 소스를 활용하면
간단히(?) 드라이브 문자, 볼륨명을 출력할수가 있네요..
다른분들이 보았을때 별것 아닐수 있어도..내용을 그대로 사용기에 쓸수가 없어서..하이이잌님의 소스를 활용하는 내용을 추가를 하였습니다
이런 부분에 대해서는 양해를 하여주십시요..복사해서 붙여 넣기를 안했을뿐이지..솔찍히 내용은 다 있죠...
저처럼..x64 전용 PE를 사용하시는 분이시라면 한번 활용해 보시는것도 재미가 있으실것 같습니다
즐거운 하루가 되시길 바랍니다
댓글 [14]
-
하얀눈사람 2021.11.09 15:35
-
광풍제월 2021.11.09 16:38
수고하셨습니다.
-
ehdwk 2021.11.09 17:25
수고하셨습니다. -
하늘소 2021.11.09 18:07
매번 어려운 작업하시느라 수고가많으십니다..
-
샤 2021.11.09 18:13
수고하셨습니다.
-
슈머슈마 2021.11.09 18:14
Usort 없이 드라이브 추출 및 diskpart 를 이용할려다보니
Pe에서는 작동 하지 않았던 부분도 있고 숨겨진 파티션 불러오기가 안됬던 부분도 있어서 어쩔수 없이 usort 를 선택했던 부분도 있었습니다. 재가 잘 몰랐던 부분도 있을수도 있구요. 아무튼 감사합니다. 잘보고 따라 할수 있었던거 같습니다. -
파란하늘흰구름 2021.11.09 20:50
수고많으셨습니다
-
모세 2021.11.09 21:49
감사합니다. 수고하셨습니다.
-
동방오타 2021.11.10 08:23
고맙습니다. ^^;
-
지후빠 2021.11.10 10:14
좀 쉽게 생각해보면... 로컬 쓰기 가능한 미디어 루트에는 System Volume Information 폴더가 있으니 다음처럼 해볼 수 있지 않을까요?
폴더/파일을 썼다 지울 필요가 없으니 여러면에서 잇점이 있을 것 같습니다. 혹 System Volume Information 폴더가 없는 경우도 있을까요?
물론 CD 마스터링할때 생각없이 System Volume Information 폴더까지 복사한 경우에는 시디롬 드라이브도 나올 수 있겠네요.
네트워크 드라이브는 해당 폴더가 없으므로 나오지 않습니다.
@echo off
for %%a in (A B C D E F G H I J K L M N O P Q R S T U V W Y Z) do if exist "%%a:\System Volume Information\" (echo %%a)
pause
$RECYCLE.BIN 폴더도 가능은 한데요 FAT32 용량 작은 미디어에서는 없을 수도 있습니다. 어차피 FAT32은 백업 원본이나 저장위치로 적당하지 않으므로 $RECYCLE.BIN 폴더를 사용하여도 무방할 것도 같습니다.
-
왕초보 2021.11.10 10:49
전혀 상상도 못한 방법입니다..그런데 효과는 확실하네요.그리고 빠르네요
오늘도 이렇게 귀한것을 배우게 되었습니다..좋은 방법을 알려주셔서 감사합니다..
1. J: L: 2개가 CD 입니다...탐색기에 보면...하드 디스크(8) 이동식 미디어(3)으로 표시되는것을 보면..어디엔가 구분하는 방법 있나 봅니다
2. 파티션을 포멧후 확인을 한것입니다..이렇게 폴더가 있습니다..$RECYCLE.BIN 는 조금 나중에 생기네요.
윈도우 파티션을 포맷할수도 있어서..확인을 하여 본것입니다
3 CD롬인 J: L: 은 당연히 보이지 않습니다...지후빠님 감사합니다.
@echo off
setlocal enabledelayedexpansion
for %%a in (A B C D E F G H I J K L M N O P Q R S T U V W Y Z) do if exist "%%a:\System Volume Information\" (
Call :_VolName %%a: sDrvVol
echo %%a: !sDrvVol!
)
pause>nul
exit
::///////////////////////////////////////////////////////////////////////////////
:: 볼륨명 추출
::///////////////////////////////////////////////////////////////////////////////
:_VolName
for /f "tokens=2 delims=:" %%a in ('vol %1') do Set %2=%%a&Set %2=!%2:~1!&goto:eof
-
지후빠 2021.11.10 11:43
PE가 아닌 보통의 윈도우라면 당연히 wmic logicaldisk 에서 drivetype 으로 미디어 종류를 구별할 것인데요.(wmic는 winapi 접근 인터페이스...)
이게 다 winapi에 접근할 수 있는 중간 인터페이스를 제거한 경량 PE에서 동작하게 만들려고 보니 생기는 번거러움인 것 같습니다.
drivetype 0 => Unknown, 1 => No Root Directory, 2 => Removable Disk, 3 => Local Disk, 4 => Network Drive, 5 => Compact Disc, 6 => RAM Disk
회원님들 사용 편의를 위해 함수 형태로 수정하여 올립니다. 사용 샘플 있으니 참고하시어 사용해보시기 바랍니다.^^
-
왕초보 2021.11.10 12:54
역시...능력자분이시네요..
그리고...소스는 언제보아도 간결하네요...
wmic가 있으면..다양한 기능이 활용할수가 있어서 좋기는 합니다..없은 PE도 고려해야해서 PE는 제약이 많네요..
지식을 베풀어 주신 마음에 감사드립니다
벌써 점심시간이네요..맛점하세요.
인증샷입니다...
-
Compuser 2021.11.10 12:26
늘 수고 많으십니다.
역시 초보는 왕초보님이십니다.^^
수고하셨습니다