添加txt文件列

时间:2019-01-07 14:24:04

标签: batch-file

我想在批处理文件中的日期(我通过文件名检索)的txt文件上添加一列。目前,我为每行末尾添加名称,但是需要很长时间。有可能做得更快吗?

名称文件看起来像:MVSSYSA.PCEAS910.20181205033230

@echo off
set Source=U:\Help
REM For all txt files
FOR /F "delims=" %%G IN ('DIR /B /a-d "%Source%\*.txt"') DO (
   ECHO Adding %%G
   ECHO. >> %%G.txt

   REM I take the third word
   for /f "tokens=3 delims=." %%f in ("%%~nG") do (
        set NewFileName=%%f
        REM For each line I add the date                               
           for /f "usebackq tokens=*" %%a in ("%Source%\%%~G") do (
                Echo %%a %1 %%f >> %%G.txt 
           )
    )
)

1 个答案:

答案 0 :(得分:0)

重定向>>使其变慢-特别是对于大文件。 >>打开要写入的文件,搜索文本的结尾以能够追加,写新行并再次关闭文件。每一行都要这样做,这需要时间。

最好只执行一次写操作。因此,而不是

for /l %%a in (1,1,1000) do echo %%a>>file.txt

打开/写入/关闭文件一千次,最好做

(for /l %%a in (1,1,1000) do echo %%a)>file.txt

通过一次打开/写入/关闭操作将for循环的整个输出重定向到文件,这要快得多。

应用于您的代码,它应该类似于:

@echo off
set Source=U:\Help
REM For all txt files
FOR %%G IN ("%Source%\*.txt") DO (
   ECHO Adding %%G
   > %%G.txt (
     REM I take the third word
     for /f "tokens=3 delims=." %%f in ("%%~nG") do (
        set NewFileName=%%f
        REM For each line I add the date                               
           for /f "usebackq tokens=*" %%a in ("%Source%\%%~G") do (
              Echo %%a %1 %%f 
           )
     )
   )
)

(注意:我没有检查您的“有效载荷”代码,但是我想您的问题的注释中有一些问题)