자유 게시판

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

2021.12.28 21:50

슈머슈마 조회:387 추천: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 - -
4696 xplorer2 ultimate 4.1.0.1 포터블 자료 요청 [3] 방탄소년단 601 12-21
4695 미드 추천 넷플릭스 Netflix 로스트인스페이스 Lost in Space [2] 번개 601 08-22
4694 노트북에서 메인으로 사용할 OS 찿을라고 [2] 딸랑이 601 08-23
4693 홍익인간 캠페인 [5] 레마클로 600 07-03
4692 애드웨어 삭제 후기 - advanced windwos manager [4] 뷰리풀투데 600 09-03
4691 벤토리 usb에 설치하고.... [3] 도파니 600 11-17
4690 앞 쓰레기 버리는곳 [1] 세븐좋아 600 10-01
4689 QuantumPE Admin에서 VMware Tools 설치에 성공했네요... [4] 개미와베짱 600 02-20
4688 자료 요청드립니다. [2] 삐쟁이 600 01-29
4687 녹스와 가상컴 [1] 세븐좋아 600 05-26
4686 어때, 오늘 나 간지좀 나? 배트맨 코스프레 작렬~! [1] 한결맘 600 05-28
4685 윈포 무엇이 문제인가? [3] 천상천하 600 02-02
4684 빌게이츠 시대의 MS, 스티브 잡스 시대의 애플이 그립군요. [5] 절제자 600 10-07
4683 새론이 교복 핏 뿌잉이당 600 11-10
4682 영화보기.블루투스 헤드폰.10만원대.추천하나 해주십시요~ [3] 태화루 599 08-15
4681 cmpa 한글화 관련 테스트 해보실분 [29] 夕影 599 11-12
4680 KJ님 WindowsXPE128 좀 전달해 주실 분??? [5] 비선실세 599 11-20
4679 메시가 결국에는 ㅠㅠ 도뽱 599 08-11
4678 자동차보험 운전경력 혜댁 문의드립니다.^^ [3] 개울소리 599 03-31
4677 이거 번역기로 이상한거 같은데 좀 부탁합니다 [3] 니나노랑카 599 01-30
XE1.11.6 Layout1.4.8