在last循环迭代中避免使用null值?

时间:2017-04-06 02:57:15

标签: batch-file for-loop cmd

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

我使用计数器来检查迭代次数,我还读到它可能是NL CR正则表达式问题,但是for for file-set中的finstr /v /r /c:"^$"就像在这篇文章Batch file for loop appears to be running one extra time/iteration对我不起作用(但我可能不能正确理解它)。

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

@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.显然不是理想的。

1 个答案:

答案 0 :(得分:1)

您只需要像这样更改增量结构。 (在从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!