Windows Batch에서 목록 또는 배열 만들기
다음과 같이 배치 파일에서 목록이나 배열을 선언 할 수 있습니까?
set list = "A B C D"
그런 다음 다음 사이에 공백을 사용하여 파일에 작성해야합니다.
A
B
C
D
예, 두 가지 방법을 모두 사용할 수 있습니다. 요소를 분리하고 분리 된 행으로 표시하려는 경우 목록이 더 간단합니다.
set list=A B C D
공백으로 구분 된 값 목록은 for
명령 으로 쉽게 처리 할 수 있습니다 .
(for %%a in (%list%) do (
echo %%a
echo/
)) > theFile.txt
다음과 같이 배열을 만들 수도 있습니다.
setlocal EnableDelayedExpansion
set n=0
for %%a in (A B C D) do (
set vector[!n!]=%%a
set /A n+=1
)
다음과 같이 배열 요소를 표시합니다.
(for /L %%i in (0,1,3) do (
echo !vector[%%i]!
echo/
)) > theFile.txt
배치 파일의 배열 관리에 대한 자세한 내용은 cmd.exe (배치) 스크립트의 배열, 연결 목록 및 기타 데이터 구조를 참조하십시오.
주의! set
명령에 포함 된 모든 문자 가 변수 이름 (등호 왼쪽) 또는 변수 값에 삽입 된다는 것을 알아야합니다 . 예를 들어 다음 명령은 다음과 같습니다.
set list = "A B C D"
list
값 "A B C D"
(공백, 따옴표, A 등)을 사용하여 (목록 공간) 이라는 변수를 만듭니다 . 따라서 set
명령에 공백을 삽입하지 않는 것이 좋습니다 . 값을 따옴표로 묶어야하는 경우 변수 이름과 값을 모두 묶어야합니다.
set "list=A B C D"
추신- ECHO.
빈 줄을 남기기 위해 사용해서는 안됩니다 ! 대안은 ECHO/
. 이 점에 대한 자세한 내용은 http://www.dostips.com/forum/viewtopic.php?f=3&t=774를 참조하십시오.
@echo off
setlocal
set "list=a b c d"
(
for %%i in (%list%) do (
echo(%%i
echo(
)
)>file.txt
필요하지 않습니다. 실제로는 일괄 적으로 변수를 "선언"할 수 없습니다. 변수에 값을 할당하면 값이 생성되고 빈 문자열을 할당하면 값이 삭제됩니다. 할당 된 값이없는 변수 이름에는 빈 문자열 값이 있습니다. 모든 변수는 예외없이 문자열입니다. (정수) 수학 함수를 수행하는 것처럼 보이는 연산이 있지만 문자열에서 앞뒤로 변환하여 작동합니다.
Batch is sensitive to spaces in variable names, so your assignment as posted would assign the string "A B C D"
- including the quotes, to the variable "list "
- NOT including the quotes, but including the space. The syntax set "var=string"
is used to assign the value string
to var
whereas set var=string
will do the same thing. Almost. In the first case, any stray trailing spaces after the closing quote are EXCLUDED from the value assigned, in the second, they are INCLUDED. Spaces are a little hard to see when printed.
ECHO
문자열을 에코합니다. 일반적으로 배치에서 사용되는 기본 구분자 중 하나 인 공백이 뒤 따릅니다 (다른 것들은 TAB, COMMA, SEMICOLON입니다.이 중 어느 것이나 잘 작동하지만 TABS는 종종 텍스트 편집기와 다른 사람은). 지난 몇 년 동안 자신의 단점을 성장 다른 문자는 다음 O
에 ECHO
정확하게 문서화 된 공간이해야 할 일을하는 것으로 밝혀졌다합니다. DOT는 일반적입니다. 여는 괄호 (
는 아마도 명령 이후 가장 유용 할 것입니다.
ECHO.%emptyvalue%
ECHO
상태 ( ECHO is on/off
)에 대한 보고서를 생성하는 반면
ECHO(%emptyvalue%
빈 줄이 생성됩니다.
문제 ECHO(
는 결과가 "불균형 해 보인다"는 것입니다.
때로는 배열 요소가 매우 길 수 있습니다. 이때 다음과 같이 배열을 만들 수 있습니다.
set list=a
set list=%list%;b
set list=%list%;c
set list=%list%;d
그런 다음 보여주세요.
@echo off
for %%a in (%list%) do (
echo %%a
echo/
)
배열 유형이 없습니다.
There is no 'array' type in batch files, which is both an upside and a downside at times, but there are workarounds.
Here's a link that offers a few suggestions for creating a system for yourself similar to an array in a batch: http://hypftier.de/en/batch-tricks-arrays.
- As for echoing to a file
echo variable >> filepath
works for echoing the contents of a variable to a file, - and
echo.
(the period is not a typo) works for echoing a newline character.
I think that these two together should work to accomplish what you need.
Further reading
- For an in depth explanation why "elem[1]" only LOOKS like an array see this SO answer: Arrays, linked lists and other data structures in cmd.exe (batch) script
@echo off
set array=
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set nl=^&echo(
set array=auto blue ^!nl!^
bycicle green ^!nl!^
buggy red
echo convert the String in indexed arrays
set /a index=0
for /F "tokens=1,2,3*" %%a in ( 'echo(!array!' ) do (
echo(vehicle[!index!]=%%a color[!index!]=%%b
set vehicle[!index!]=%%a
set color[!index!]=%%b
set /a index=!index!+1
)
echo use the arrays
echo(%vehicle[1]% %color[1]%
echo oder
set index=1
echo(!vehicle[%index%]! !color[%index%]!
참고URL : https://stackoverflow.com/questions/17605767/create-list-or-arrays-in-windows-batch
'Programing' 카테고리의 다른 글
nginx : [emerg]가 server_names_hash를 빌드 할 수 없습니다. server_names_hash_bucket_size를 늘려야합니다. (0) | 2020.12.04 |
---|---|
0 분이 아닌 시간부터 시작하여 5 분마다 크론 작업을 실행하려면 어떻게해야합니까? (0) | 2020.12.04 |
MotionEvent.getRawX와 MotionEvent.getX의 차이점 (0) | 2020.12.04 |
MySQL의 \ G에서와 같이 psql에서 선택 결과를 세로로 표시합니다. (0) | 2020.12.04 |
git : 원격에 로컬에없는 작업이 포함되어있어 업데이트가 거부되었습니다. (0) | 2020.12.04 |