我有这个CSV:
The;Quick;Brown;Fox
我知道如何获取字符串:
findstr /v "*" brownfox.csv
但是如何在不使用 For 循环的情况下保护变量中的此字符串。
我想在这里处理字符串以获取令牌计数 %i%
set var1=(the string from brownfox.csv)
set var2=%var1%
set i=0
:loopprocess
for /F "tokens=1* delims=;" %%A in ( "%var1%" ) do (
set /A i+=1
set var1=%%B
goto loopprocess )
echo The string contains %i% tokens.
我只需要变量中 CSV 中的整个文本。
我不确定为什么你不能使用 for
,但如果你绝对不能使用它,你需要一个临时文件:
>%TEMP%foo.tmp findstr /v "*" brownfox.csv
<%TEMP%foo.tmp set /p "var1="
但是,从您的描述来看,您根本不需要该变量。无论如何,您都使用for
循环。为什么不干脆做
for /f "tokens=1* delims=;" %%A in ('findstr /v "*" brownfox.csv') do (
set /a i+=1
set "var1=%%B"
)
<brownfox.csv set /p "line="
FOR %%G IN (%line%) DO set /a count+=1
echo The string contains %count% tokens.
第一行获取文件(第一行(,第二行计算令牌,第三行将其写入屏幕。
只有一个选择适合你。这会将字符串拆分为变量的伪数组,并为您提供数组中变量数的计数。
@echo off
setlocal EnableDelayedExpansion
set i=1
set /p "x="<brownfox.csv
set "x!i!=%x:;=" & set /A i+=1 & set "x!i!=%"
set x
echo %i%
pause
此技术是在 DosTips.com 的此线程中发现的。