자유 게시판

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

2021.12.28 21:50

슈머슈마 조회:388 추천: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 - -
45376 삼성 슬립형. 업그러이드 [7] 엄마갯돈 992 03-11
45375 와~~ 유일하게 큰나무님 PE만이 ㄷㄷㄷㄷㄷㄷㄷ [18] 입문자 1780 03-11
45374 누누tv 아직도 하네요. [7] 복두꺼비 1471 03-11
45373 동영상 편집할 때 apocalypse pack 이라는 거 있으면 멋있... [2] 복두꺼비 475 03-10
45372 NSudo, PowerRun 다 막힌 걸까요? [5] harman777 637 03-10
45371 1980년, 조용필 - 잊을 수 없어/내 이름은 구름이여, LP 2... [14] 미리내i 1050 03-10
45370 웨일 사용하시는분? [3] 해중이 842 03-10
45369 윈도우 업데이트 통합. [3] 옛날에 1030 03-10
45368 MS pc m........? [1] 빨강모자 571 03-10
45367 배경음악 이 필요하지만 [5] never 516 03-10
45366 업무용으로 쓰려고 삼성 갤럭시북3 프로 하나 질러봤습니다. [7] 질투의화신 917 03-10
45365 오랜만에 인사를 전합니다...^^* [2] 최동안 399 03-10
45364 사진이 미리보기가 안되요 [1] 달맞이꽃 364 03-09
45363 노트북 에러 [5] bsj00 648 03-09
45362 [배포예정]W10(22H2_19045_2673)music [119] 우인 1795 03-09
45361 결국 추신수 말이 옳았다? 추가 글 있습니다.. [17] 테츠로 1590 03-09
45360 wifi 패스워드 보는 게 벡신대상인가? [7] kernel 1317 03-09
45359 마이로소프트사에서 프로그램 분석 결과를 알려주었네요 [9] gooddew 1073 03-09
45358 WBC 생각보다 재미가.. [3] 도뽱 855 03-08
45357 꼬져님 마지막 버전 받고 싶습니다. [3] 하얀달 841 03-08
XE1.11.6 Layout1.4.8