Batch file 在最后一次for循环迭代中避免空值?
我有一个文本文件,每行一个字符串(总共只有几行)。需要搜索此文件并存储每个字符串。脚本最终会提示用户选择一个存储的字符串(如果文件中存在多个字符串/行),但for循环会在我不希望的情况下额外迭代一次 我正在使用计数器检查迭代次数,我还了解到这可能是NL CR正则表达式的问题,但是像本文中那样的for文件集中的Batch file 在最后一次for循环迭代中避免空值?,batch-file,for-loop,cmd,Batch File,For Loop,Cmd,我有一个文本文件,每行一个字符串(总共只有几行)。需要搜索此文件并存储每个字符串。脚本最终会提示用户选择一个存储的字符串(如果文件中存在多个字符串/行),但for循环会在我不希望的情况下额外迭代一次 我正在使用计数器检查迭代次数,我还了解到这可能是NL CR正则表达式的问题,但是像本文中那样的for文件集中的finstr/v/r/c:“^$”对我不起作用(但我可能没有正确理解它) “pref”一词是因为字符串最终将用作同一文件夹中文件的前缀 @echo off setlocal enablede
finstr/v/r/c:“^$”
对我不起作用(但我可能没有正确理解它)
“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已关闭。
显然不需要。您只需要像这样更改增量结构。(在从0开始的每行之前设置)
@Echo关闭
Setlocal EnableDelayedExpansion
设置“i=0”
对于/F“UseBackQ Delims=“%A In”(“sys.txt”)Do(
设置/A“i+=1”
设置“pref!i!=%%A”
Echo(pref!i!)
Echo(i的最后一个值=%i%
对于(1,1,%i%)中的/L%%A,执行回显(!pref%%A!
set/ax=-1在for
循环之后立即…@somethingsdark Nice。没有想到。但是我在使用rename命令之前遇到了一个问题,它在其中两次向组的第一个文件添加前缀。所以我希望能更好地理解这一点。你有一个Base0/Base1不匹配错误。你应该从set/ax+=1
。echo pref!x!
足以打印pref1
等,绝对不需要%^%
…使用调用echo%%pref!x!%%
或for%%x in(!x!)do echo!pref%%x!
。有关详细信息,请参阅。for
循环的的结束符在哪里?@lit:这是echo(pref!i!)
行中的最后一个参数!我认为Compo是这样写的(在echo
命令中添加不需要的左参数)出于迷惑人的目的…:/
@lit,由于我所有的Echo
命令后面都紧跟着“不需要”的左括号,因此它应该足以反驳肯定不是故意的迷惑语句。(事实上,如果我不必在android键盘上选择不同的页面来输入=
,我会像往常一样在这三个地方使用它)。