100개 언어 Speedrun: 에피소드 72: Windows 배치 파일
.bat
인 배치 파일은 DOS와 같은 쉘 스크립트입니다.DOS 버전(여전히 DOSBox에서 사용)은 매우 제한적이었고 숫자를 추가할 수도 없었습니다. OS/2 및 Windows NT부터
.bat
파일이 일부 매우 기초적인 스크립팅 기능으로 확장되었으므로 이것이 오늘 우리가 할 일이지만 이러한 확장 기능의 사용을 수학용으로만 set /a
사용하도록 제한하겠습니다. .이 예제는 모든 Windows 시스템에서 실행할 수 있습니다.
set /a
때문에 DOSBox에서 작동하지 않거나 DOS 시스템에서 작동하지 않습니다.안녕하세요, 월드입니다!
다음과 같이 작성하여 시작할 수 있습니다
hello.bat
.echo Hello, World!
불행히도 그것은 매우 성가신 일을 하고 그것을 실행하기 전에 모든 명령을 반향시킵니다. 디버깅에는 괜찮지만 대부분의 경우 실제로 원하는 것은 아닙니다.
C:\> hello
C:\> echo Hello, World!
Hello, World!
C:\>
명령 앞에
@
를 넣어 수정하거나 @echo off
명령을 사용하여 반향을 완전히 비활성화할 수 있습니다.@echo off
echo Hello, World!
C:\> hello2
Hello, World!
C:\>
나는 그 여분의 줄 바꿈이 어디에서 왔는지 아직 확실하지 않지만 지금은 그것에 대해 걱정하지 마십시오.
변수
set name=value
를 사용하여 변수를 설정하고 %name%
를 사용하여 다른 명령에 삽입할 수 있습니다.@echo off
set name=Alice
echo Hello, %name%!
C:\> vars
Hello, Alice!
C:\>
이것은 우리가 DOSBox나 DOS 머신에서 여전히 그 예제를 실행할 수 있는 지점에 관한 것입니다. 이 시점부터 모든 Windows 확장입니다.
수학
DOS
.bat
파일에는 수학을 할 수 있는 방법이 없었지만 Windows는 이에 대해 다음과 같이 추가했습니다set /a
.@echo off
set /a a = 40
set /a b = 380
set /a c = %a% + %b%
echo %c%
C:\> math
420
C:\>
고리
@echo off
set /a i = 1
:loop
echo %i%
set /a i = 1 + %i%
if %i% neq 11 goto :loop
C:\> loop
1
2
3
4
5
6
7
8
9
10
C:\>
여기에서 무슨 일이 일어나고 있습니까?
i
의 초기 값을 1:loop
i
의 현재 값을 반향합니다.i
1
만큼 증가합니다.i
가 11
와 같지 않으면 :loop
로 이동합니다.피보나치
함수는 어렵기 때문에 반복적인 해법을 해봅시다. 우리는 루프에서 많은 변수 할당과 추가를 수행합니다. 여기에는 새로운 기능이 필요하지 않습니다.
@echo off
set /a i = 1
set /a a = 1
set /a b = 1
:loop
echo fib(%i%)=%a%
set /a i = 1 + %i%
set /a c = %a% + %b%
set /a a = %b%
set /a b = %c%
if %i% neq 21 goto :loop
C:\> fib
fib(1)=1
fib(2)=1
fib(3)=2
fib(4)=3
fib(5)=5
fib(6)=8
fib(7)=13
fib(8)=21
fib(9)=34
fib(10)=55
fib(11)=89
fib(12)=144
fib(13)=233
fib(14)=377
fib(15)=610
fib(16)=987
fib(17)=1597
fib(18)=2584
fib(19)=4181
fib(20)=6765
C:\>
피즈버즈
@echo off
set /a i = 1
:loop
set /a fizzbuzz = %i% %% 15
set /a fizz = %i% %% 3
set /a buzz = %i% %% 5
set /a t = %i%
if %fizz% == 0 set t=Fizz
if %buzz% == 0 set t=Buzz
if %fizzbuzz% == 0 set t=FizzBuzz
echo %t%
set /a i = 1 + %i%
if %i% neq 101 goto :loop
C:\>fizzbuzz
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
...
우리는
set
할 수 있는 것처럼 조건부로 goto
할 수 있습니다.FizzBuzz, 최신 버전
지금까지는 DOS 기능과
set /a
만 사용했습니다. 그러나 Windows는 .bat
파일에 많은 기능을 추가했습니다. 이전 버전과의 호환성을 유지하기 위해 추가 기호와 스위치 뒤에 조심스럽게 게이팅했습니다.모든 기능을 사용하려는 경우 FizzBuzz는 다음과 같습니다.
@echo off
setlocal enableDelayedExpansion
for /l %%j in (1 1 100) do (
set /a fizz = %%j %% 3
set /a buzz = %%j %% 5
set /a fizzbuzz = %%j %% 15
if !fizzbuzz! == 0 (
echo FizzBuzz
) else if !buzz! == 0 (
echo Buzz
) else if !fizz! == 0 (
echo Fizz
) else (
echo %%j
)
)
그러나 이 시점에서 PowerShell을 사용하는 것이 좋습니다.
Windows 배치 파일을 사용해야 합니까?
아니요. Windows 시스템을 스크립팅해야 하는 경우 PowerShell이 이미 있습니다. 더 복잡한 것이라면 실제 프로그래밍 언어를 사용하는 것이 좋습니다.
암호
All code examples for the series will be in this repository .
Code for the Windows Batch Files episode is available here .
Reference
이 문제에 관하여(100개 언어 Speedrun: 에피소드 72: Windows 배치 파일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/taw/100-languages-speedrun-episode-72-windows-batch-files-3aa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)