批处理脚本需要以相同的逻辑执行的速度有多快

时间:2017-10-29 12:49:19

标签: windows batch-file

过去几天我坚持我的要求。首先我要解释我的逻辑。我正在计算一个具有某种逻辑的文件的特定行号。然后将其传递给函数:copy_text.in此函数我正在复制data.txt文件输出文件,在file.my问题中添加了一行(作为参数传递的第i行),代码现在工作正常,但需要7分钟才能复制40k记录。如果我将评论函数:line_count ,处理只需30秒,但我无法在输出文件中添加该行。

我无法更改此enabledelayedexpansion和disabledelayedexpansion参数,因为我在从文件打印值时面临很多问题。因为我的文件值包含!和%字符,以及每行的长度超过3000个字符。

Exp:其他信息:来源的74.49%子公司:tps://pro/search/xyz/card/index.html?code =!121212#!121;

只有我的问题在于计算文件行以在该特定行中添加文本no.please建议我如何使用此部分快速运行脚本。

@ECHO Off
echo.%time%
setlocal enabledelayedexpansion
set /a hold_list_line_no=0 (This value will come from different logic)
::>>>>>>>>>>>>>>>>>>>>>>>>
call :copy_text !hold_list_line_no!
endlocal
echo.%time%
pause
exit 0;

:copy_text
setlocal disabledelayedexpansion
set /a line=%~1
FOR /F "delims=" %%c IN (C:\Users\1519499\Desktop\data.txt) DO (
call :line_count
echo %%c>>output.txt
)

:line_count
SET /A i+=1
if %i% equ %line% ( 
type add_this.txt>>C:\Users\1519499\Desktop\output.txt 
)

1 个答案:

答案 0 :(得分:0)

试试这个:

@ECHO Off
echo %time%
setlocal enabledelayedexpansion
set /a hold_list_line_no=0 (This value will come from different logic)
::>>>>>>>>>>>>>>>>>>>>>>>>
call :copy_text !hold_list_line_no!
endlocal
echo %time%
pause
exit 0

:copy_text
set /a line=%~1, i=0
(FOR /F "delims=" %%c IN (C:\Users\1519499\Desktop\data.txt) DO (
   SET /A i+=1
   if !i! equ %line% type add_this.txt
   setlocal disabledelayedexpansion
   echo %%c
   endlocal
)) > output.txt

此方法避免了call命令和>>追加重定向,这本身就很慢......您也可以在copy_text循环之前清空环境:

:copy_text
setlocal enabledelayedexpansion
for /F "delims==" %%a in ('set') do set "%%a="