批处理:当只需要行号跳过时,将显示数字跳过以上的所有行

时间:2015-08-02 03:39:26

标签: loops batch-file

我试图创建一个批处理文件,将名称列表转换为用户名,格式为(姓氏)(名字的第一个字母),例如Robert Smith - > SmithR 我已将大部分内容排序,但我遇到问题,它会在文本文档中循环这些行,我不知道为什么会这样做。我想知道你们是否可以告诉我如何解决它

提前致谢^ - ^

代码:http://pastebin.com/zDtJrPrV NAMES:http://pastebin.com/xbh3WTSv

1 个答案:

答案 0 :(得分:1)

您的脚本效率低下,并且比需要的时间长得多。您的第一个for /f循环会因无用的findstr而受到影响,如果您的名称文件包含任何空白行,那么这实际上会带来更多弊大于利。为名称文件的每一行启动一个新的for /f "skip=N"将导致文件在每次迭代时只需要打开一次就可以打开,读取和关闭。使用find /c计算文本文件中的行数更为优雅。

在这里,尝试加盐:

@echo off
setlocal

set "names=names.txt"
set "outfile=outfile.txt"

for /f %%I in ('find "" /v /c ^< "%names%"') do set /a "lines=%%I"

choice /c YN /n /m "Preparing to process %lines% lines.  Continue? (y/n) "

if errorlevel 2 goto :EOF

>"%outfile%" (
    setlocal enabledelayedexpansion
    for /f "usebackq tokens=1*" %%I in ("%names%") do (
        set "first=%%I"
        echo %%J!first:~0,1!
    )
    endlocal
)