标题: [其他] 【已解决】批处理如何将多行命令合成一组,提高运行效率 [打印本页]
作者: 思想之翼 时间: 2023-3-6 16:42 标题: 【已解决】批处理如何将多行命令合成一组,提高运行效率
主题如下,重复了,故删除。
作者: 思想之翼 时间: 2023-3-6 17:08 标题: 【已解决】如何将多行命令合成一组,提高运行效率
本帖最后由 思想之翼 于 2023-3-6 17:41 编辑
如何将下列逐行运行的代码,合成一组,让系统一次性对多条指令进行同时预处理,提高运行效率。- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
复制代码
作者: czjt1234 时间: 2023-3-6 17:11
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- ping 127.0.0.1 -n 10
- t
复制代码
start可以不等令命令结束就继续下一行命令
加ping的目的是等待所有gawk.exe执行完毕,如果你不需要等待可以删除之
作者: 77七 时间: 2023-3-7 01:47
- @echo off
- for %%a in (1 2) do (
- for /l %%b in (1,1,7) do (
- 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
- )
- )
- pause
复制代码
可以用for语句写到一起
作者: terse 时间: 2023-3-8 13:52
回复 2# 思想之翼
看了问题已解决,来问一下,这样写好像没有确保这个XXX文件里的全部赋值了哦
作者: 思想之翼 时间: 2023-3-10 18:22
回复 5# terse
感谢!确实未全部赋值,bwfr 也是这样。如何解决该问题?
作者: terse 时间: 2023-3-10 22:46
回复 6# 思想之翼
把赋值txt放后面处理 然后加个判断
根据你的示例 简化一下代码 不用DIR的话 就手动加一下处理的文件 "e:\Data\XXX.txt"文件放第一个处理- @echo off&setlocal enabledelayedexpansion
- 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"
- 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%
- pause
复制代码
作者: hfxiang 时间: 2023-3-11 10:01
本帖最后由 hfxiang 于 2023-3-11 10:22 编辑
如果工作文件夹 "d:\Data\01\"及"d:\Data\02\"中无其它无关的.txt文件,为避免terse大神7楼代码第3行的总长度有可能大于8192字节造成出错(主要是因为%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:/,\"e:\",f);print(a[i])>f}}}" "e:\Data\XXX.txt" d:\Data\01\*.txt d:\Data\02\*.txt
复制代码
作者: 思想之翼 时间: 2023-4-14 00:46
本帖最后由 思想之翼 于 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 如何修改,恳望指点。- @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
回复 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 恳望指点
作者: terse 时间: 2023-4-14 16:11
回复 9# 思想之翼
是不是这样?- @echo off&setlocal enabledelayedexpansion
- rem 文件编码为ansl
- for /l %%a in (1,1,1000) do (
- set "p=00000%%a"
- set p=!p:~-6!
- if exist "d:\HY\!p!\" (
- for /l %%b in (1,1,7) do (
- if exist "d:\HY\!p!\!p!_%%b.txt" (
- 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"
- )
- )
- )
- )
- pause
复制代码
作者: hfxiang 时间: 2023-4-14 16:18
回复 10# 思想之翼
试试以下脚本(针对新的要求,把“sub(/^d:/,\"e:\",f)”改为“sub(/^d:\\HY/,\"e:\\HY\\01\",f)”):- @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
复制代码
作者: 思想之翼 时间: 2023-4-14 17:57
本帖最后由 思想之翼 于 2023-4-15 12:42 编辑
回复 12# hfxiang
感谢!经测试,该代码计算7个文本,共耗时11厘秒,耗时最少。
作者: dos-a 时间: 2023-4-14 23:44
回复 2# 思想之翼
直接for加start /b
作者: dos-a 时间: 2023-4-14 23:44
回复 14# dos-a
for 的写法已经有人了,只需要改改参数就行了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |