避免在循环迭代的最后一个 for 中出现空值



>我有一个文本文件,每行一个字符串(总共只有几行(。需要搜索此文件并存储每个字符串。该脚本最终会提示用户选择一个存储的字符串(如果文件中存在多个字符串/行(,但是 for 循环在我不希望它时迭代额外的时间。

我正在使用计数器来检查迭代次数,我还读到这可能是 NL CR 正则表达式问题,但是 for 文件中的finstr /v /r /c:"^$",如这篇文章中的批处理文件 for 循环似乎正在运行一个额外的时间/迭代对我不起作用(但我可能理解不正确(。

"pref"一词是因为字符串最终将用作同一文件夹中文件的前缀......

@echo off
setlocal enabledelayedexpansion
set /a x=1
for /f %%a in (sys.txt) do (
  set pref!x!=%%a && echo %^%pref!X!%^% && set /a x+=1
)
echo last value of x = !x!
for /L %%a in (1,1,!x!) do (
  echo !pref%%a!
)
REM The rest would be to prompt user to choose one (if multiple) and 
REM   then use choice as a prefix with a ren %%a %prefX%%%a

如果"sys.txt"包含三行分别带有字符串 A、B、C 的行,那么我目前得到的输出是:

pref1
pref2
pref3
last value of x = 4
A
B
C
ECHO is off.

显然,ECHO is off.是不希望的。

你只需要像这样改变你的增量结构。(将其设置在从 0 为基数的每行之前(

@Echo Off
Setlocal EnableDelayedExpansion
Set "i=0"
For /F "UseBackQ Delims=" %%A In ("sys.txt") Do (
    Set/A "i+=1"
    Set "pref!i!=%%A"
    Echo(pref!i!)
Echo(last value of i = %i%
For /L %%A in (1,1,%i%) Do Echo(!pref%%A!

最新更新