我可以将我的 Findstr 结果保存在变量中吗?



我有这个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 的此线程中发现的。

最新更新