我想在批处理文件中的日期(我通过文件名检索)的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
)
)
)
答案 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
)
)
)
)
(注意:我没有检查您的“有效载荷”代码,但是我想您的问题的注释中有一些问题)