找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25218|回复: 14

[其他] 【已解决】批处理如何将多行命令合成一组,提高运行效率

[复制链接]
发表于 2023-3-6 16:42:53 | 显示全部楼层 |阅读模式
主题如下,重复了,故删除。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2023-3-6 17:08:19 | 显示全部楼层

【已解决】如何将多行命令合成一组,提高运行效率

本帖最后由 思想之翼 于 2023-3-6 17:41 编辑

如何将下列逐行运行的代码,合成一组,让系统一次性对多条指令进行同时预处理,提高运行效率。
  1. D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\01\001_1.txt e:\Data\XXX.txt>>e:\Data\01\001_1.txt
  2. D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\01\001_2.txt e:\Data\XXX.txt>>e:\Data\01\001_2.txt
  3. D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\01\001_3.txt e:\Data\XXX.txt>>e:\Data\01\001_3.txt
  4. D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\01\001_4.txt e:\Data\XXX.txt>>e:\Data\01\001_4.txt
  5. D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\01\001_5.txt e:\Data\XXX.txt>>e:\Data\01\001_5.txt
  6. D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\01\001_6.txt e:\Data\XXX.txt>>e:\Data\01\001_6.txt
  7. D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\01\001_7.txt e:\Data\XXX.txt>>e:\Data\01\001_7.txt
  8. D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\02\001_1.txt e:\Data\XXX.txt>>e:\Data\02\001_1.txt
  9. D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\02\001_2.txt e:\Data\XXX.txt>>e:\Data\02\001_2.txt
  10. D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\02\001_3.txt e:\Data\XXX.txt>>e:\Data\02\001_3.txt
  11. D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\02\001_4.txt e:\Data\XXX.txt>>e:\Data\02\001_4.txt
  12. D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\02\001_5.txt e:\Data\XXX.txt>>e:\Data\02\001_5.txt
  13. D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\02\001_6.txt e:\Data\XXX.txt>>e:\Data\02\001_6.txt
  14. D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\02\001_7.txt e:\Data\XXX.txt>>e:\Data\02\001_7.txt
复制代码
发表于 2023-3-6 17:11:30 | 显示全部楼层
  1. start "" D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\01\001_1.txt e:\Data\XXX.txt>>e:\Data\01\001_1.txt
  2. start "" D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\01\001_2.txt e:\Data\XXX.txt>>e:\Data\01\001_2.txt
  3. start "" D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\01\001_3.txt e:\Data\XXX.txt>>e:\Data\01\001_3.txt
  4. start "" D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\01\001_4.txt e:\Data\XXX.txt>>e:\Data\01\001_4.txt
  5. start "" D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\01\001_5.txt e:\Data\XXX.txt>>e:\Data\01\001_5.txt
  6. start "" D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\01\001_6.txt e:\Data\XXX.txt>>e:\Data\01\001_6.txt
  7. start "" D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\01\001_7.txt e:\Data\XXX.txt>>e:\Data\01\001_7.txt
  8. start "" D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\02\001_1.txt e:\Data\XXX.txt>>e:\Data\02\001_1.txt
  9. start "" D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\02\001_2.txt e:\Data\XXX.txt>>e:\Data\02\001_2.txt
  10. start "" D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\02\001_3.txt e:\Data\XXX.txt>>e:\Data\02\001_3.txt
  11. start "" D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\02\001_4.txt e:\Data\XXX.txt>>e:\Data\02\001_4.txt
  12. start "" D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\02\001_5.txt e:\Data\XXX.txt>>e:\Data\02\001_5.txt
  13. start "" D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\02\001_6.txt e:\Data\XXX.txt>>e:\Data\02\001_6.txt
  14. start "" D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\02\001_7.txt e:\Data\XXX.txt>>e:\Data\02\001_7.txt
  15. ping 127.0.0.1 -n 10
  16. t
复制代码
start可以不等令命令结束就继续下一行命令
加ping的目的是等待所有gawk.exe执行完毕,如果你不需要等待可以删除之

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢

查看全部评分

发表于 2023-3-7 01:47:29 | 显示全部楼层
  1. @echo off
  2. for %%a in (1 2) do (
  3.         for /l %%b in (1,1,7) do (
  4.                 start /min "" D:\Tool\gawk.exe -F"=" "NR==FNR{A[$1]=$2;next}{print A[$0]}" d:\Data\0%%a\001_%%b.txt e:\Data\XXX.txt>>e:\Data\0%%a\001_%%b.txt
  5.         )
  6. )
  7. pause
复制代码

可以用for语句写到一起

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢

查看全部评分

发表于 2023-3-8 13:52:50 | 显示全部楼层
回复 2# 思想之翼

看了问题已解决,来问一下,这样写好像没有确保这个XXX文件里的全部赋值了哦
 楼主| 发表于 2023-3-10 18:22:22 | 显示全部楼层
回复 5# terse

感谢!确实未全部赋值,bwfr 也是这样。如何解决该问题?
发表于 2023-3-10 22:46:36 | 显示全部楼层
回复 6# 思想之翼
把赋值txt放后面处理 然后加个判断
根据你的示例 简化一下代码 不用DIR的话 就手动加一下处理的文件  "e:\Data\XXX.txt"文件放第一个处理
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (01 02) do for /f "tokens=*" %%b in ('dir /s/a-d /b "d:\Data\%%a\001_?.txt"') do set f=!f! "%%b"
  3. gawk -F"=" "ARGIND>1{if(b[$1]){a[ARGIND]=a[ARGIND]==""?$2:a[ARGIND] "\n" $2;next}}{b[$0]++}END{for(i=2;i<=ARGIND;i++){ if(a[i]){f=ARGV[i];sub(/^d:/,"e:",f);print(a[i])>f}}}"  "e:\Data\XXX.txt" %f%
  4. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢

查看全部评分

发表于 2023-3-11 10:01:50 | 显示全部楼层
本帖最后由 hfxiang 于 2023-3-11 10:22 编辑

如果工作文件夹 "d:\Data\01\"及"d:\Data\02\"中无其它无关的.txt文件,为避免terse大神7楼代码第3行的总长度有可能大于8192字节造成出错(主要是因为%f%的长度不过预知,有可能会造成过长),可把代码再简化如下(整个脚本只有1行):

  1. @gawk -F"=" "ARGIND>1{if(b[$1]){a[ARGIND]=a[ARGIND]==""?$2:a[ARGIND] "\n" $2;next}}{b[$0]++}END{for(i=2;i<=ARGIND;i++){ if(a[i]){f=ARGV[i];sub(/^d:/,"e:",f);print(a[i])>f}}}" "e:\Data\XXX.txt" d:\Data\01\*.txt d:\Data\02\*.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢

查看全部评分

 楼主| 发表于 2023-4-14 00:46:44 | 显示全部楼层
本帖最后由 思想之翼 于 2023-4-14 14:21 编辑

回复 7# terse
感谢帮助!部分正则代码,几经尝试修改,仍无果而终。

字典文本:d:\HY\000001\000001_1.txt
待替换文本:e:\ZD\01\000001\000001_1.txt
希望输出结果文本:e:\HY\01\000001\000001_1.txt

下述代码输出结果是:e:\HY\000001\000001_1.txt  如何修改,恳望指点。
  1. @gawk -F"=" "ARGIND>1{if(b[$1]){a[ARGIND]=a[ARGIND]==""?$2:a[ARGIND] "\n" $2;next}}{b[$0]++}END{for(i=2;i<=ARGIND;i++){ if(a[i]){f=ARGV[i];sub(/^d:/,"e:",f);print(a[i])>f}}}" "e:\ZD\01\000001\000001_1.txt" d:\HY\000001\000001_1.txt
复制代码
 楼主| 发表于 2023-4-14 15:35:09 | 显示全部楼层
回复 8# hfxiang

字典文本:d:\HY\000001\000001_1.txt
待替换文本:e:\ZD\01\000001\000001_1.txt
希望输出的结果文本:e:\HY\01\000001\000001_1.txt

您的代码 输出结果是:e:\HY\000001\000001_1.txt  恳望指点
发表于 2023-4-14 16:11:39 | 显示全部楼层
回复 9# 思想之翼
是不是这样?
  1. @echo off&setlocal enabledelayedexpansion
  2. rem 文件编码为ansl
  3. for /l %%a in (1,1,1000) do (
  4.      set "p=00000%%a"
  5.      set p=!p:~-6!
  6.      if exist "d:\HY\!p!" (
  7.         for /l %%b in (1,1,7) do (
  8.              if exist "d:\HY\!p!\!p!_%%b.txt" (
  9.                 gawk -F"=" "ARGIND>1{if(b[$1]){a[ARGIND]=a[ARGIND]==""?$2:a[ARGIND] "\n" $2;next}}{b[$0]++}END{for(i=2;i<=ARGIND;i++){ if(a[i]){f=ARGV[i];sub(/^d:\\[^^\\]+\\/,"e:\\HY\\0%%b\\\\",f);print(a[i])>f}}}" "e:\ZD\01\!p!\!p!_%%b.txt" "d:\HY\!p!\!p!_%%b.txt"
  10.             )
  11.        )
  12.     )
  13. )
  14. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢

查看全部评分

发表于 2023-4-14 16:18:47 | 显示全部楼层
回复 10# 思想之翼

试试以下脚本(针对新的要求,把“sub(/^d:/,\"e:\",f)”改为“sub(/^d:\\HY/,\"e:\\HY\\01\",f)”):

  1. @gawk -F"=" "ARGIND>1{if(b[$1]){a[ARGIND]=a[ARGIND]==""?$2:a[ARGIND] "\n" $2;next}}{b[$0]++}END{for(i=2;i<=ARGIND;i++){ if(a[i]){f=ARGV[i];sub(/^d:\\HY/,"e:\\HY\\01",f);print(a[i])>f}}}" "e:\ZD\01\000001\000001_1.txt" d:\HY\000001\000001_1.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
思想之翼 + 1 感谢!可行。

查看全部评分

 楼主| 发表于 2023-4-14 17:57:36 | 显示全部楼层
本帖最后由 思想之翼 于 2023-4-15 12:42 编辑

回复 12# hfxiang
感谢!经测试,该代码计算7个文本,共耗时11厘秒,耗时最少。
发表于 2023-4-14 23:44:33 | 显示全部楼层
回复 2# 思想之翼


    直接for加start /b
发表于 2023-4-14 23:44:58 | 显示全部楼层
回复 14# dos-a


    for 的写法已经有人了,只需要改改参数就行了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 01:03 , Processed in 0.023025 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表