Windows Batch脚本获取具有始终相同结构的子字符串

时间:2018-08-17 09:03:48

标签: batch-file

我想知道是否有办法从Windows批处理文件的字符串中始终获取相同的子字符串?我会举一个例子,说明我要做什么:

我们说我有以下字符串

INSERT INTO [Models] ([Id], [Name], [MakeId]) VALUES ('6b29d7cd-224b-4c81-9bb8-597b5b771ae8', 'Scirocco 2l GT', '26422e04-95bd-43f9-923a-9e3b16e8456f')
INSERT INTO [Models] ([Id], [Name], [MakeId]) VALUES ('3bc65d09-0602-42a1-ab68-7ad7bc0615c5', 'Santana GLS', '26422e04-95bd-43f9-923a-9e3b16e8456f')
INSERT INTO [Models] ([Id], [Name], [MakeId]) VALUES ('b5cb64c8-78e7-47ff-95e8-dce7d2482112', 'Kübel 181', '26422e04-95bd-43f9-923a-9e3b16e8456f')
INSERT INTO [Models] ([Id], [Name], [MakeId]) VALUES ('de6f6495-edb6-4dcc-8aa6-a60b362d7280', 'Transporter T3 TD', '26422e04-95bd-43f9-923a-9e3b16e8456f')

我总是有这样的INSERT INTO String,但是,即使有可能,我也想不出如何修整该字符串,所以我只剩下Name值,例如Scirocco 2l GTSantana GLS

我有以下代码,它将每一行读入一个变量,然后我需要获取子字符串。但是这是我遇到的问题,我不知道如何获取所需的子字符串

@echo off
set "File2Read=sqlstrings.txt"
If Not Exist "%File2Read%" (Goto: Error)
rem This will read a file into an array of variables and populate it 
setlocal EnableExtensions EnableDelayedExpansion
for /f "delims=" %%a in ('Type "%File2Read%"') do (
    set /a count+=1
    set "Line[!count!]=%%a"
)
rem Display array elements
For /L %%i in (1,1,%Count%) do (
    rem echo "Var%%i" is assigned to ==^> "!Line[%%i]!"
    for /F [delims=,] %%G IN ("!Line[%%i]!") DO 
)
pause>nul
Exit

1 个答案:

答案 0 :(得分:1)

下面的代码如何?

@echo off
> nul chcp 1252
for /F "tokens=4 delims=, eol=," %%J in ('^> nul chcp 437 ^& type "test.txt"') do (
    for /F "tokens=2 delims=' eol='" %%I in (" %%J") do (
        echo(%%I
    )
)

这首先提取第四个逗号分隔的标记,它们是(请注意开头的 SPACE ):

 'Scirocco 2l GT'
 'Santana GLS'
 'Kübel 181'
 'Transporter T3 TD'

然后提取第二个用撇号分隔的标记,它们是感兴趣的名称:

Scirocco 2l GT
Santana GLS
Kübel 181
Transporter T3 TD

完成代码中的代码页切换以正确显示子字符串之一中的ü