일괄 처리 중 문자열 분할 실현 코드
for 명령을 사용하면 문자열을 세그먼트로 처리할 수 있습니다.
분할 문자열
@echo off
::
set str=AAA;BBB;CCC;DDD;EEE;FFF
::str
set remain=%str%
:loop
for /f "tokens=1* delims=;" %%a in ("%remain%") do (
:: ( )
echo %%a
rem remain,
set remain=%%b
)
:: ,
if defined remain goto :loop
pause
주요 설명 for 문장:delims=;구분 기호로 remain 문자열을 분할 처리합니다.
tokens=1*, tokens는 단락을 나누는 방식을 나타내고, tokens=1*는 첫 번째 구분자를 나타낸다.이전의 것은 일부로, 나머지 (* 표시) 는 일부로 한다.이 두 부분은 순환체에서 총%%a로 첫 번째 부분을 표시하고%%b는 두 번째 부분을 표시할 수 있다.
path 환경 변수 일괄 처리
path 환경 변수도 구분 기호로 일괄 처리 중이므로 위의 코드로 path 환경 변수를 훑어볼 수 있습니다.
@echo off
setlocal enabledelayedexpansion
::
set str=%path%
::str
set remain=%str%
:loop
for /f "tokens=1* delims=;" %%a in ("%remain%") do (
:: ( )
echo %%a
rem remain,
set remain=%%b
)
:: ,
if defined remain goto :loop
pause
실행 결과:D:\dev\workspace\MarkdownTools
......
C:\windows\system32
D:\dev\java\jdk1.8.0_91\bin
F:\Program Filesodejsode_global
F:\Program Files\Git\bin
D:\dev\apache-maven-3.5.4\bin
......
아무 키나 눌러서 계속해..
일괄 처리 path 환경 변수에 디렉터리가 있는지 판단
예를 들어 시스템 path 환경 변수에 D:\dev\workspace\MarkdownTools 디렉토리가 있는지 확인합니다.
@echo off
setlocal enabledelayedexpansion
::
::set str=AAA;BBB;CCC;DDD;EEE;FFF
set str=%path%
::str
set remain=%str%
set toFind=D:\dev\workspace\MarkdownTools
set isFind=false
:loop
for /f "tokens=1* delims=;" %%a in ("%remain%") do (
if "%toFind%"=="%%a" (
:: ,
set isFind=true
::
goto :finded
)
rem remain,
set remain=%%b
)
:: ,
if defined remain goto :loop
:finded
echo %isFind%
pause
실행 결과:true
아무 키나 눌러서 계속해..
참고 자료
최근에 셸 스크립트의 기능을 윈도우즈로 옮겨야 한다는 작은 요구가 있었지만 셸에 수조 개념이 있는 것을 발견했지만 윈도우즈에는 없었다. 또한 셸에는 문자열 분할을 처리하는 방식이 많았지만bat에서는 비교적 계륵처럼 보였고 탐색을 통해 드디어 방안(Stack Overflow:http://stackoverflow.com/questions/1707058/how-to-split-a-string-in-a-windows-batch-file):
방안: for 순환 처리를 통해 처리하는 방식은 두 가지로 나눌 수 있는데 하나는 일반 for이고 하나는 for의 파일 처리 방식이다.
시나리오 1:
@echo off & setlocal
rem s ,
rem also works for comma-separated lists, e.g. ABC,DEF,GHI,JKL
set s=AAA BBB CCC DDD EEE FFF
for %%a in (%s%) do echo %%a
방안 2: is the best for (most) arbitrary delimiter characters.
@echo off & setlocal
set s=AAA BBB CCC DDD EEE FFF
set t=%s%
:loop
for /f "tokens=1*" %%a in ("%t%") do (
echo %%a
rem t,
set t=%%b
)
if defined t goto :loop
어떤 형이 더 완전한 (지연 변수를 사용했다):
@echo off
setlocal ENABLEDELAYEDEXPANSION
REM Set a string with an arbitrary number of substrings separated by semi colons
set teststring=The;rain;in;spain
REM Do something with each substring
:stringLOOP
REM Stop when the string is empty
if "!teststring!" EQU "" goto END
for /f "delims=;" %%a in ("!teststring!") do set substring=%%a
REM Do something with the substring -
REM we just echo it for the purposes of demo
echo !substring!
REM Now strip off the leading substring
:striploop
set stripchar=!teststring:~0,1!
set teststring=!teststring:~1!
if "!teststring!" EQU "" goto stringloop
if "!stripchar!" NEQ ";" goto striploop
goto stringloop
)
:END
endlocal
그리고 이런 것:
set input=AAA BBB CCC DDD EEE FFF
set nth=4
for /F "tokens=%nth% delims= " %%a in ("%input%") do set nthstring=%%a
echo %nthstring%
Powershell에서 사용할 수 있는 내장 함수는 다음과 같습니다.PS C:\> "AAA BBB CCC DDD EEE FFF".Split()
bat 대신 vbscrip을 사용하자는 의견도 있습니다.
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
str1 = objArgs(0)
s=Split(str1," ")
For i=LBound(s) To UBound(s)
WScript.Echo s(i)
WScript.Echo s(9) ' get the 10th element
Next
usage:
c:\test> cscript /nologo test.vbs "AAA BBB CCC"
마지막으로bat의 작은 난점: 변수 지연 (위에서 아래로, 한 줄씩 (간단한 문장, 복합 문장 (for,if 문장 블록은 한 줄로만 계산) 집행, 한 줄씩 집행하지 않음)변수 지연 상세callsetlocal
이상은 일괄 처리에서 문자열 분할 실현 코드의 상세한 내용입니다. 일괄 처리 문자열 분할에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
BAT 일괄 처리 서비스 작동 여부를 판단하는 방법(일괄 처리 명령 통합 적용)일괄 처리(Batch), 일괄 처리 스크립트라고도 합니다.말 그대로 일괄 처리는 특정한 대상을 대량으로 처리하는 것으로 일반적으로 간단한 스크립트 언어로 여겨지며 이것은 DOS와 Windows 시스템에 응용된다.일괄...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.