我有一批12341234;Super Coca Cola格式的字符串,其中;的两边都是可变长度的。我想拆开字符串并检索两个子字符串。我该怎么做呢?
更新:这是我尝试解决一个问题的方法。
for /F "tokens=*" %%Z in ('type "C:\Users\daniel.bak\Desktop\Tableau Client Data Extracts\Master Data Extracts\clients.txt"') do (
for /f "delims=; tokens=1,2" %%B in (%%Z) do (
echo %%B
echo %%C
)
)
pause作为输出我得到了什么:
C:\Users\daniel.bak\Desktop\Tableau Client Data Extracts\Master Data Extracts>fo
r /F "tokens=*" %Z in ('type "C:\Users\daniel.bak\Desktop\Tableau Client Data Ex
tracts\Master Data Extracts\clients.txt"') do (for /F "delims=; tokens=1,2" %B i
n (%Z) do (
echo %B
echo %C
) )
C:\Users\daniel.bak\Desktop\Tableau Client Data Extracts\Master Data Extracts>(f
or /F "delims=; tokens=1,2" %B in (2;Glaxo Smith Kline) do (
echo %B
echo %C
) )
The system cannot find the file 2.
C:\Users\daniel.bak\Desktop\Tableau Client Data Extracts\Master Data Extracts>(f
or /F "delims=; tokens=1,2" %B in (3;Merck Canada Inc.) do (
echo
echo %C
) )
The system cannot find the file 3.
C:\Users\daniel.bak\Desktop\Tableau Client Data Extracts\Master Data Extracts>pa
use
Press any key to continue . . .clients.txt文件:
2;herpherp
3;derpderp什么是“系统找不到文件2”的东西?我要它回音"2",第一个字符串的第一部分。但它似乎想要访问一个名为2的文件。怎么了?
发布于 2015-05-12 16:16:36
在分隔符上拆分字符串是批处理for循环的内置功能。在命令行上使用for /?查看语法。您需要使用delims和tokens选项。
set "my_string=12341234;Super Coca Cola"
for /f "delims=; tokens=1,2" %%a in ("%my_string%") do (
echo %%a
echo %%b
)如果您的字符串位于文件中,则需要一个循环来遍历文件中的所有行。您只需将for-loop参数从字符串更改为文件名,循环将为您完成这一切。
for /f "usebackq delims=; tokens=1,2" %%a in ("data.txt") do (
echo first: %%~a
echo second: %%~b
)如果由于某些原因,在尝试拆分行之前需要根据行进行决策,则可以使用嵌套的for循环。外部可以读取线,内部可以分裂。注意,如果在外部循环中设置变量,则必须使用延迟展开来查看内部的变量。下面是一个例子。
@echo off
setlocal enabledelayedexpansion
for /f "usebackq delims=" %%l in ("data.txt") do (
set "line=%%~l"
REM Note that inside the outer loop we use !line! and not %line%.
echo Processing "!line!".
for /f "delims=; tokens=1,2" %%a in ("!line!") do (
echo first: %%~a
echo second: %%~b
)
)发布于 2015-05-12 16:54:19
我比你想象的容易得多:
for /F "usebackq tokens=1,2 delims=;" %%a in ("C:\Users\daniel.bak\Desktop\Tableau Client Data Extracts\Master Data Extracts\clients.txt") do (
echo %%a
echo %%b
)
pause您需要文件名的引号,因为它包含空格。但for会将其解释为字符串,而不是引号中的文件名。因此,您还需要usebackq告诉for,引号并不意味着"string“。
PS:您的解决方案还可以通过用引号将%%Z作为字符串处理(没有usebackq,因为这一次,您希望它是一个字符串,而不是文件名):
for /f "delims=; tokens=1,2" %%B in ("%%Z") do (https://stackoverflow.com/questions/30195915
复制相似问题