일괄 처리 중 문자열 분할 실현 코드

배치 문자열 분할 인스턴스
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
이상은 일괄 처리에서 문자열 분할 실현 코드의 상세한 내용입니다. 일괄 처리 문자열 분할에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!

좋은 웹페이지 즐겨찾기