2017-08-24 169 views
0

让我首先说我对这个很新,以及我在这个网站上找到了什么样的代码拼凑在一起。批量打印文本的特定行到文件

最后我需要一个批处理,当运行时将抓取父目录中的每个文件夹名称。并将其复制到名为label1,label2等的文本文件中。

我开始从文本文件中的目录列表中拉出行。我能得到它,从这个帖子 Windows Batch file to echo a specific line number

我做了一些修改,试图把它放在一个循环,我现在什么也没有了回音使用塞特的代码的最后一行到文件中。

如果任何人都可以帮助我,将不胜感激。这是我的代码到目前为止。

set /a "x=1" 
    set /a "lines=91" 
    :while1 
     if %x% leq %lines% (
     for /f "tokens=*" %%a in ('findstr /n .* "Y:\Test\foldernametest.txt"') do (
     set "FullLine=%%a" 
     for /f "tokens=1* delims=:" %%b in ("%%a") do (
     setlocal enabledelayedexpansion 
     set "LineData=!FullLine:*:=!" 
     if "%%b" equ "%1" echo(!LineData! 
     echo title=!linedata! > Lable%x%.dat 
     set /a "x= x+1" 
     endlocal 
     goto :while1 
     ) 
    ) 

回答

0
setlocal enabledelayedexpansion 
set /a x=1 
set /a lines=91 
:while1 
    if %x% leq %lines% (
    for /f "tokens=*" %%a in ('findstr /n .* "Y:\Test\foldernametest.txt"') do (
    for /f "tokens=1* delims=:" %%b in ("%%a") do (
     if "%%b" equ "%x%" (
     echo(%%c 
     echo title=%%c > Lable%x%.dat 
     set /a x= x+1 
     goto while1 
    ) 
    ) 
) 
endlocal 

我有理由相信这将工作,如将

setlocal enabledelayedexpansion 
set /a x=1 
set /a lines=91 
:while1 
    if %x% leq %lines% (
    for /f "tokens=1* delims=:" %%a in ('findstr /n .* "Y:\Test\foldernametest.txt"') do if %%a==%x% (
    echo(%%b 
    echo title=%%b > Lable%x%.dat 
    set /a x= x+1 
    goto while1 
    ) 
) 
endlocal 

与您的代码的问题是,endlocal终止setlocal和所有的,因为已经发生的环境变化setlocal被退出 - 环境恢复到setlocal执行时的状态。

结果是,在您的代码中,您正在增加x(变量的宏名称),然后在执行endlocal时退出增量。

因此 - 将整个例程放在一个setlocal/endlocal括号中。这还有其他的优点 - 比如你在@echo off之后立即执行setlocal,那么当程序终止时,环境将返回到它的原始状态 - 随着越来越多的批处理运行,它不会累积更改(通常是添加变量)。

我做的其他一些改变是化妆品。在set /a引号是多余的,所以是一个goto结肠(与goto :eof唯一的例外)

你是%1(意为“第一个参数常规”),还有一个问题,你可能是指“% X%”。

在第一代码段中,findstr的输出被分配到%%a和内for定界符到%%b以及向%%c前后分配findstr的那部分。您显然希望选择等于%x%的行%%b,以便代码进行比较,如果相等,则将%%c(其余行)和title=%%c输出到由Lable和行号组成的文件。 (你错误地拼写了label);然后递增x并再次尝试。

第二段代码是对第一段的简化。该行从文件中读取并进行编号,然后直接在冒号上分割; %%a得到的数字,%%b其余的行,所以如果%%a是相同的数字%x%那么我们想要做一些事情(不需要引号,因为%%a是一个简单的数字字符串和x也将数字,因为它从来没有分配以字符串包含分隔符)。

的事情,待做的是呼应从文件的行(%%b,凹凸的行号,并重新开始......

+0

这个完美。谢谢你的帮助,他们非常详细解释,我将再读5次左右,看看我是否理解。 – ArtVandelay