자유 게시판

cmd 배열에 대한이야기 2 (모꼬모지님)

2021.12.28 21:50

슈머슈마 조회:408 추천:4

코드해석을 재미있고 맛깔나게 이야기한거 같아 퍼왔습니다.

 

웃자고 쓴글인거 같아 올렸는데 문제가 생기면 바로 자삭 하겠습니다.

 

@echo off

cd /d "%~dp0"

dir /s /b /ad "새 폴더*.*">line.txt&&set /p "z_path="<line.txt&&del line.txt

echo z_path output = %z_path%

pause

​보통 배열을 질문 하지..ㅇ_ㅇ''

그렇게...ㅡㅡ'' 결과값을?

cmd 문법을 잘 몰랐을 때 사람들이 쓰던 방법..

이걸 응용 해서.. 배열을 썻는데... 사실 배열이라는 이론은 엄청 늦게 나온 이론 임..

for문도 모르는데 배열을...ㅡㅡ'''

@echo off
cd /d "%~dp0"
echo dddd1>line.txt
set /p "z_path[1]="<line.txt
echo dddd2>line.txt
set /p "z_path[2]="<line.txt
echo dddd3>line.txt
set /p "z_path[3]="<line.txt
echo %z_path[1]%
echo %z_path[2]%
echo %z_path[3]%
pause

초기 배열문...

이런 배열문도 for문 나오기 전까지는 거의 사용치 않음..

cmd의 절정은 set문에서 시작해서 for문으로 끝남..

for 문으로 시작한.. 결과값을 for문으로 저장..

사실.. 예전 cmd 하는 사람들이 for문이 단순 숫자 증가하고..

아무것도 할 줄 몰랐음.. 2010 년까지.. 그냥 원시시대의 구석기 인들이었음..

for 문을 자유 자재로 활용 되기 이전과 이후로 cmd가 바뀜..물론..

set /a 의 연산이 지대한 공현을 한 것 맞음.. 하지만 for문을 모르고서는

cmd를 했다고 할 수 없음..

for문을 왜 하나? 이 질문하고 무슨 관계냐..

소스 1이나 소스2는 물론 잘못된 소스가 아님.. 그냥 구태 한 개념에서 시작된..원시적

소스임..ㅇ_ㅇ'''

배치파일 기본 문법임..

@echo off
for /f "usebackq delims=" %%f in (`dir /s /b /ad "*.*"`) do echo %%f
pause

2009년 경에 세상이 뒤집어짐..ㅇ_ㅇ'''

cmd 하던 인간들이 인제 for문에 강력함에 for 문을 구사하게 됨..

구석기를 벗어나 신석기.. 시대로 접어 들고..

cmd 유저는 2가지 부류로 나뉘게 됨...for문을 아냐 모르냐...

사람들이 그 때부터 하는게 for /? 의 번역에 좌절..ㅇ_ㅇ''

2009년 이전까지는..발 번역으로 인해 포기하신분들 많음..

배열이 나오게 됨.. 즉 저 위에 위에 배열이 나온게..

for문 이후에 생성이 되는 개념임.. 사실 그전에 배열이 나오기 했으나..

아주 원론적인 배열임..

함수(fx) 세대 - 청동기 시절

@echo off
setlocal
cd /d "%~dp0"
for /f "usebackq delims=" %%f in (`dir /s /b /ad "*.*"`) do (
call :arry "%%~f"
)
set z_var goto :end :arry
set /a z_num=%z_num%+1
set "z_var_%z_num%=%~1"
goto :eof
:end
endlocal
pause

청동기를 지나..철기 시대로..진입..

철기시대에는 setlocal 파와 SETLOCAL ENABLEDELAYEDEXPANSION 파로

분파가 일어남..

서로 같으나 약간 다른..문법적 미묘한 파가 생김..

난 setlocal파.. 전통적인? 문법 사용..

이 철기 시대로 들어 오면서 배치파일이 복잡해짐..

왜? 함수를 타니깐 느려..ㅇ_ㅇ 개느려...~!!!

그래서 함수를 타지 않고 for문에서 누적을 일으킬 수 없을까..

setlocal 파와 SETLOCAL ENABLEDELAYEDEXPANSION 파에 알고리즘

괴변을 일으킴.. 물론 각각 장단점이 있음..

setlocal 파는 ENABLEDELAYEDEXPANSION 이걸 어케 왜워 그냥 문법 다이 다이 구사...

개 귀차니즘 스킬 발동..

SETLOCAL ENABLEDELAYEDEXPANSION 파는 setlocal 로는 소스 구현이 안되..

ㅡㅡ'' 이걸로 어떻게 짜.. 뭐 이런..? 거지 같은 상황이 발생 하여 두가지 파로 분기 됨..

ENABLEDELAYEDEXPANSION 이 걸 외워서라도.. ㅇ_ㅇ 편하고 빠르게 하겠다.

물론 fx 청동기 시절에 우선 적으로 ENABLEDELAYEDEXPANSION 나오고

setlocal 파가 분기탱천해서 ㅇ_ㅇ 별에별 소스를 다 뒤지게 됨..

지옥까지 갔다 왔다는 소문이...

setlocal enabled~... [존나 길음..데충 넘어가자] 파..

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
cd /d "%~dp0"
for /f "usebackq delims=" %%f in (`dir /s /b /ad "*.*"`) do (
set /a num+=1
set "z_path[!num!]=%%~f"
)
set z_path
endlocal
pause

setlocal 파

@echo off SETLOCAL cd /d "%~dp0" for /f "usebackq delims=" %%f in (`dir /s /b /ad "*.*"`) do ( call set /a num+=1 call set "z_path[%%num%%]=%%~f" ) set z_path endlocal pause

정착기 농경생활 나는 setlcoal 파 기 때문에.. setlocal 기준으로 이야기..

농경생활로 오면 중요 한 것이 환경변수의 정렬이 즉 자동으로 줄 세우기를 잘해야함..

줄을 세워서 자동으로 읽는 작업...

enabl 파쪽은 이게 약간 미흡하다고 봤는데.....그래서 농경생활로 들어 오지 못한다라고

생각을 하는게..잘못 됐다는...반성을 하게 됨..

물론 enabl파..에도 격는 문제이기 하지만 그쪽은 아직 철기시대에 멈처 있는..듯한 느낌? 이었으나..

요즘은..농경생활 즉 정착생활로 넘어 오는 듯한 느낌?..

배열을 써서 기록 한 후.. 불러오기를 enabl파 쪽은 대부분 수기 적인 방법을 사용 함..

출력 시 숫자 누적을 이용하여 출력 하거나 더하기 빼기 혹은 다이렉트 숫자를 기입 해서

쓰기를 하였으나 요즘은 바뀜..

enable 파쪽은 농경생활로 넘어 오기 위해서 for /l 로 발전됨..

for /l 를 사용 하여, 윗의 소스와 아래의 소스가 잘 어울러저서 소스의 고속화를 만들어 냄..

SETLOCAL ENABLEDELAYEDEXPANSION 파

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
cd /d "%~dp0"
for /f "usebackq delims=" %%f in (`dir /s /b /ad "*.*"`) do (
set /a num+=1
set "z_path[!num!]=%%~f"
)
for /l %%l in (1,1,%num%) do (
echo !z_path[%%l]!
)
endlocal
pause

setlocal 쪽은.. 궁리끝에...

제로스트링 문법을 구사 하게 되고.. ㅇ_ㅇ'' 배열의 줄 세우기에 성공을 함

물론 연산 처리 쪽 두 라인이 추가 되어서 상당히 느려지긴 했으나..

줄을 못세우는 것은 아니라는..자위? ㅇ_ㅇ'''

순서가 중요치 않으면 제로스트링 안쓰고 for /l 시전 해도 되능..ㅇ_ㅇ'''

물론 enabld 파쪽도 제로스트링을 사용 해서 for /f 를 시전 해되 됨..ㅇ_ㅇ'''

대신 enabld 에서 for /l 을 버리고 for /f를 쓰는 건 거의 냥비에 가깝다고 보임..

물론 어쩔 수 없는 문법이라면 사용..

근데 어차피 이분들 set 배열명 이것 자체를 거의 안쓰기 때문에...

나의 생각에는 enabld 쪽은 for /l 이 배열을 망친듯.. ㅇ_ㅇ)a

물론 해당 문법이 표준으로 잡혀가니 더 비비고 발전된 문법이 나오기 힘듬..

for /l 도 상당히 강력한 문법이라.. enabld 쪽은 최종 보스급 소스라고 생각 됨..

@echo off
SETLOCAL
cd /d "%~dp0"
for /f "usebackq delims=" %%f in (`dir /s /b /ad "*.*"`) do (
call set /a z_num+=1
call set /a z_num2=000000%%z_num%%
call set "z_path[%%z_num:~-4%%]=%%~f"
)
for /f "usebackq tokens=1* delims==" %%f in (`set z_path`) do (
echo %%g
)
endlocal
pause

그리고 여기서 setlocal 는 한단계 더 발전된 모델로 감..ㅇ_ㅇ''' 먼저 부족사회로 진입

setlocal 파 부족사회의 충격과 공포..소스로 진입

@echo off
SETLOCAL
cd /d "%~dp0"
for /f "usebackq delims=" %%f in (`dir /s /b /ad "*.*"`) do (
call set /a z_num+=1
call set /a z_num2=000000%%z_num%%
call set "z_path.%%z_num:~-4%%=%%~f"
)
for /f "usebackq tokens=1* delims==" %%f in (`set z_path`) do (
echo "%%g-1"
echo "%%~ng-2"
)
endlocal
pause

그 것은 도트를 찍는 것...~!!!!

도트를 찍는 것으로..ㅇ_ㅇ''' 혁신 혁명.. ~!!!

그 이름 하여 도트혁명...

이 일어남..ㅇ_ㅇ'''

왜 그런 가는 본인이 스스로 알아 낼 것..ㅇ_ㅇ'''

다 알려 주면 재미 없음..ㅇ_ㅇ'''

그리고 농경시대에 있어도 수준 높은 스크립팅 짤 수 있음...

부족사회 진입도 사실 2019년 중후에 진입한 거라..ㅇ_ㅇ'''

어차피..ㅇ_ㅇ'''')/) 대부분..setlocal 파 보단...

enable 파 될 것 뻔하니깐..ㅋㅋㅋ setlocal 파 ㅇ_ㅇ''' 문법

알 이유가 없음...''' 그런게 있다라는 정도 배우면 됨..

그리고 setlocal 과 enable 어느쪽을 쓰건 고급 사용자나? 그런 것 없다..

setlocal 쪽은 그냥 단순 enable 20몇자를 외우기 싫어서 그냥 setlocal 를 구사 하는 것 이다.

ㅇ_ㅇ''' 대신 문법이 복잡해지고 어러워지고 느려진다.

enable쪽은 단순 해지며, 빠르다.

입문자에겐 enable쪽이 실보다 득이 더 많은 상황이라는 점..

setlocal 그냥 귀찬니즘이고..ㅋㅋㅋㅋㅋㅋ 아 물론 내가 enable 쪽으로 짜면..

소스라인을 확 줄일 수 있긴 하나.. 귀찮...ㅇ_ㅇ'''

enable 외우기 귀찮...

그리고 해당 소스들에서 나오는 시기 이야기를 보고 읽는 입장이라 웃음으로 넘길 수 있으나..

처음 배열을 맨땅에 헤딩식으로 배우게 되면... 그것들은 전부 벽인 것 임.

즉 배열을 익히는데 벽 이라는 되는 소스들을 정리 한 것임..

 

벽을 정리 해서 말하자면.. 소스 짜는데 노 답 인 상황이 벽인 것임..

 

출처: https://blog.naver.com/mokomoji/221764050792

번호 제목 글쓴이 조회 등록일
[공지] 자유 게시판 이용간 유의사항 (정치, 종교, 시사 게시물 자제) [1] gooddew - -
42016 스크린샷-시작 버튼 받으신 분들 보세요^^ [21] 호롱불 846 12-29
42015 windows11 tpm패치가 된 설치버전이 있나요? [5] brucex 989 12-29
42014 WindowsforumPE v4 공유 좀 부탁드려봅니다.. [2] 홍은동초짜 939 12-29
42013 허씨가 계속 전화를 거네요..ㅠ.ㅠ [15] 테츠로 1260 12-29
42012 ===== VST ^___^=====수정 [3] 4k8k 1228 12-29
42011 팝송좀 찾아주세요. [4] 떠중이 533 12-29
42010 무료.. [1] 피터팬. 1179 12-29
42009 [종료] [51] 희생합시다 1446 12-29
42008 티카페회원님 링크 파일좀 올려주세요 [2] Binchal 886 12-29
42007 Billboard.HOT.20 [빌보드.핫.20] - 2021.12.25.발표 [1] 덴마쿠 368 12-29
42006 자동차에 시멘트 물 튀어 굳었을 때...신나? [5] asklee 1663 12-29
» cmd 배열에 대한이야기 2 (모꼬모지님) [6] 슈머슈마 408 12-28
42004 음악.. 오디오에 관한 제 짧은 생각... [7] 눈이 612 12-28
42003 혹시 아시는 분 있는지?? [5] 풍경소리 704 12-28
42002 Camtasia 2021.0.15 Build 34558 한국어 패치 전달해주실분~ 카야 235 12-28
42001 [종료] [42] 희생합시다 719 12-28
42000 컴퓨터 화면 녹화 프로그램은 뭐가 좋을까요? [2] 만수무강 740 12-28
41999 PE드라이브 iso파일 표시용 아이콘 공유 합니다.^^ [38] 호롱불 688 12-28
41998 컴퓨터 구매 조언 부탁해요 [7] ldH고파 512 12-28
41997 이시기에 꼭 건강검진을 받아야 합니까 [15] 몸꽝 1208 12-28
XE1.11.6 Layout1.4.8