자유 게시판

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

2021.12.28 21:50

슈머슈마 조회:405 추천: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 - -
42037 서기 2022년과 서기 1년의 날짜,요일이 완전히 일치 [2] 리어 635 12-31
42036 쏘나타 하이브리드 - 엔진 관련 리콜 asklee 406 12-31
42035 종편은.. [17] 테츠로 826 12-31
42034 제 아이가 핸드폰을 분실했습니다. [4] joyleehk 776 12-31
42033 새해 복 많이 받으세요 [5] samsiki 391 12-31
42032 죽을 만큼 보고 싶다. [2] 간장종지646 693 12-31
42031 새해 복 많이 받으세요 ~ [8] Airbrone13 371 12-31
42030 올해의 마지막날 [4] nneptkmr 300 12-31
42029 올 한해도 고맙습니다 [6] 맨션에살자 315 12-31
42028 30대에 이가 빠져서 임플란트 라니 ㅜㅜ [12] 레전드한화 1118 12-31
42027 소프트 웨어 갱신 혹은 신규 구입에 대한 궁금 한점.. [5] 테츠로 300 12-31
42026 어느 신문사 인가요? [4] 테츠로 563 12-31
42025 MPV 플레이어 유튜브 [5] [벗님] 637 12-31
42024 시드가 없네요..ㅠ.ㅠ [5] 테츠로 1229 12-30
42023 22년 1월 휴일 근무 문의 드립니다. [1] 지수아빠 753 12-30
42022 꼬져님 감사합니다. [6] 쏘이지 866 12-30
42021 살아있네 말보로맨 828 12-30
42020 혹시 노트북 마우스패드(?) 드라이버 좀 나눔해주실 수 있... [15] 희생합시다 802 12-30
42019 샴프 바꿨다 망 했습니다..ㅠ.ㅠ [10] 테츠로 1245 12-30
42018 19H2_2112 테스트 [36] 히이이잌 1601 12-30
XE1.11.6 Layout1.4.8