윈 도 우 DistStatus 수정; vbs-batch 대체 (DarknessAngel,Mua님)
2021.10.04 17:24
다크엔젤님 recovery.cmd 아니었으면 꿈도 못꿔봤을 것을 해봤습니다.^^
효율적인 구조를 만드신 DarknessAngel님, 무아님께 감사드립니다. -꾸~벅-
아래 5번을 추천드립니다. 오차는 무시할 수 있을 것 같습니다.^^ (처음 보시는 분은 5번만 보셔도 될듯...)
5. 약간의 오차(~4번과 비교~)는 있지만 확연히 빨라진, vbs가 필요없는 순수 배치파일입니다. DiskStatus순수.cmd
- 일부러 볼륨 이름 긴 것과 없는 것, 용량 큰것 끼워서 테스트 해봤습니다. 99테라까지는 될 듯 싶습니다.
일단 이정도면 될 것 같아서 여기까지 해봅니다. 한동안 딴짓을 하게 되어서... 혹시 개선할 점 발견하시면 댓글 부탁드립니다. ^^
안녕하세요?
https://windowsforum.kr/lecture/16788951 댓글 어둠천사님 DiskStatus를 조금 개선해봤습니다. 만... 역시 헛발질 일 수 있습니다.^^
둘다 기본적으로 vbs를 이용합니다. (vbs 안되는 PE에서도 사용할 수 있게 더 추가해볼 예정입니다.)
1. 원본 ; DiskStatus원본.cmd
- 단점으로 mshta.exe를 사용하고 있어서 기본이 foreground 실행이라 console 창과 전체 화면이 조금씩 요동칩니다.
- 실행속도도 조금 늦을 것으로 예상하였지만 큰 차이는 없었습니다. mshta는 볼륨 1개당 1번 실행으로 결과를 얻어서인지...
2. 수정인지는 모르겠지만 조금 바꿨습니다. ; DiskStatus수정.cmd , GBcalc.vbs
- GBcalc.vbs ; mshta가 하던 일을 background 실행이 가능한 vbs로 분리시켜서 화면 울렁거림이 없습니다.
- mshta 가 1석3조 할때 GBcalc.vbs는 1개씩 처리하지만 더 늦지는 않을 것입니다. mshta는 기본적으로 잠깐이라도 창을 형성하여서요.
- 드라이브 하나 처리하는데 mshta는 1번실행으로 3개 숫자 결과를 얻고 GBcalc.vbs는 각각 3번 실행됩니다.
- 손댄김에 문자열 정렬을 조금 바꿨습니다. 보기가 더 나으실지...
3. vbs 탑재가 안되는 PE에서는 무용지물이라 command line calculator가 수배되면 vbs 없이 가능토록 해보고 싶습니다.
- 몇개 가지고 씨름해봤는데 성과가 별로 입니다. 하도 안되서 python으로 간단히 만들었더니 용량이 6~7메가나 됩니다. 이런...
- 좀 더 해보고 성과 있으면 추가 하겠습니다.
(추가)
4. "DiskStatus수정" 버전의 버그를 수정했습니다. (스페이스 1개 추가) DiskStatus수정1.cmd
- 이것이 정확히 계산된 수치이지만 WScript 가 필요하다는 단점이 있습니다.
댓글 [12]
-
두리안 2021.10.04 17:28
-
cungice 2021.10.04 17:52
고생 많으셨습니다. 감사합니다.
-
馬井理 2021.10.04 17:56
수고하셨습니다
-
DarknessAngel 2021.10.04 18:07
원래 저런거 만지고 있으면 시간은 엄청 깨먹어도 성과도 안 나오고, 코드가 지져분한것 보면 우울해지고, 그러다가 어디선가 짧막한 코드 발견하면 벽을 느끼게 되더군요
-
왕초보 2021.10.04 18:15
저도 처음에 DarknessAngel님 소스를 보고 cmd에서 VBS를 활용하는것어 너무 신기해서 눈이 빠지도록 보았습니다
for문안에 있어서 더욱더 어려워 보이는것 같아서 따로 vbs로 만들어 테스트도 해보고..나름대로는 공부를 해본다고 하다가 어려워서 포기를..
지후빠님께서..만들어 주신것을 보고서야 이렇게 하는것이나 하고 고개가 끄덕여졌씁니다
덕분에 많이 배우게 되었습니다..감사합니다
궁금한것이 있습니다..cmd에서 wmic 로 얻은 디스크 용량은 문자열인가 봅니다..그래서 VBS로 계산을 하시는 방식이 활용된것 같아서
구글에서 아무리 찾아도..cmd에서 용량을 숫자로 인식할수 있는 방법이 있네요..
검색도 능력이라도 저는..이것도 찾다찾가다..실패만해서..포기하기는 하였습니다..
잘 부탁드립니다.
-
지후빠 2021.10.04 18:39
안녕하세요? 독려해주셔서 감사합니다.^^
https://ss64.com/nt/set.html 에서 보며 아래와 같은 내용이 있습니다.
SET /A should work within the full range of 32 bit signed integer numbers (-2,147,483,648 through 2,147,483,647) but in practice for negative integers it will not go below -2,147,483,647
CMD에서는 set /a 로 연산을 하는데 32비트 정수만 가능해서요. 이 범위를 넘어가면 안되는데 만약 10T 하드가 있으면 10,000,000,000,000 바이트이므로 32비트 정수 범위를 넘어가게 되어서 연산 오류가 납니다.
그래서 몇가지 방법이 있는데요.; https://superuser.com/questions/827044/batch-script-32-bit-limitation-of-integer
1. 10T 기준으로 뒤에서 6자리나 9자리를 잘라 없애고 MB, GB 단위로 어림 계산할 수 있구요.
2. 아니면 뒤 6자리 나머지 앞자리를 블럭을 나누어 따로 계산후 문자열로 합치는 방법
3. 외부 프로그램을 이용하는 방법이 있을 것 같습니다.
vbs 장점은 정확한 계산과 천단위 구분자(쉼표)와 소수 2자리 형태를 쉽게 만들 수 있는 것이고 단점은 wscript가 필요하다는 것입니다.
좀 편하게 가는 방법은 위 기준으로 1번에 해당하는, 조금 오차가 있더라도 뒤에서 6자리를 제거하고 MB 단위로 계산하는 것입니다.
simple하고 쓸만 command line calc가 없으면 이런 방벙으로 추가해볼 생각입니다.^^
-
왕초보 2021.10.04 19:36
너무 감사합니다...
검색도 아는것이 있어야 검색을 하는데...역시..저는 한계가 있습니다..이렇게 좋은 내용이 있는데 찾지를 못했네요...
set /a 로 숫자로 된다고 했는데..사진처럼 나와서 아니..뭘 잘못했나 했습니다..
숫자 크기가 커서 에러가 난것이네요..이렇게 또 하나 배우게 되었습니다
배운것을 잊으면 안되는데...이제는..잘 잊어버리네요...
-
DarknessAngel 2021.10.05 15:12
저거 저도 구글링해서 주운걸 뜯어고친겁니다
batch의 처리기능이 너무 노답이라 저러는듯합니다
-
상발이 2021.10.04 22:11
감사합니다. -
ehdwk 2021.10.05 07:18
수고하셨습니다. -
왕초보 2021.10.05 10:44
저도 모르게 역시! 라는 단어가 떠올랐습니다..
cmd로만으로도 구성을 하셨네요..진짜 고생 많으셨습니다
알려주신것을 열공하도록 하겠습니다
웃음이 가득한 하루 되시기 바랍니다..
-
슈머슈마 2022.03.27 20:59
와! 노답이네요. 저정도 할려면 시간투자를 얼마나 해야할런지...
너무 감사합니다. 한숨만 나오네요.
고민되는 작업 수고하셨습니다.