자유 게시판

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

2021.12.28 21:50

슈머슈마 조회:333 추천: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

번호 제목 글쓴이 조회 등록일
[공지] 자유 게시판 이용간 유의사항 (정치, 종교, 시사 게시물 자제) gooddew - -
1499 고수님들께 부탁드립니다. [4] 자유시간 366 09-13
1498 usb 상태가 요상합니다.+샌디스크 Lifetime Limited Warranty [2] 멀라 366 07-29
1497 네이버 스마트보드 앱 종료 [3] asklee 366 05-22
1496 누워서 라디오 듣는데.. 크라우디 366 01-14
1495 어쩌다 마주친 그대 - 베이스 커버 [Elly Lee] 윈도우창시 366 05-15
1494 사색의 계절 가을(잡소리) [7] 간장종지646 366 10-14
1493 배치파일 글자수 [3] bangul 366 01-15
1492 새해에도 건강 하시고 일상 무탈 하시길 기원 드립니다. [46] 선우 366 12-30
1491 매드부산 : 분노의 도로 [1] 뿌잉이당 366 11-06
1490 토네이도와 함께 ~~~! caneki 365 04-19
1489 히노마루(日の丸)의 기 [3] Asylee 365 04-11
1488 [테스트]FileLocator Pro 9.0.3294.1-portable(한글)-단일파일 [8] sTarTrak 365 02-16
1487 통영에는 06시부터 북서풍이 세게붑니다. [1] 케이블카 365 09-07
1486 Ave Maria 임달화 365 05-12
1485 Parov Stelar... All Night 셔플댄스 라면 빼놓을수 없는 ... 눈이 365 05-09
1484 Zamfir Greatest Hits Best Of Gheorghe Zamfir [6] 易모地뗀思 365 02-29
1483 MS가 음성 검색이나 나름 한국어를 지원해주고 있긴 합니다 [1] ANT-MAN 365 01-12
1482 워3 리포지드 캐릭터 아트 [1] ʕ·ᴥ·ʔ 365 11-01
1481 비쥬얼에서 전체 주석 처리란... [2] 퐁퐁2kg 365 10-24
1480 김동률 X 아이유 - 동화 [3] anfy 365 12-07
XE1.11.6 Layout1.4.8