Programing

Windows Batch에서 목록 또는 배열 만들기

lottogame 2020. 12. 4. 07:44
반응형

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는 종종 텍스트 편집기와 다른 사람은). 지난 몇 년 동안 자신의 단점을 성장 다른 문자는 다음 OECHO정확하게 문서화 된 공간이해야 할 일을하는 것으로 밝혀졌다합니다. 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


@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

반응형