Board logo

标题: [其他] 【已解决】BAT:如何添加循环语句 [打印本页]

作者: 思想之翼    时间: 2023-7-10 05:13     标题: 【已解决】BAT:如何添加循环语句

本帖最后由 思想之翼 于 2023-7-10 11:28 编辑

@echo off
setlocal enabledelayedexpansion
for /L %%i in (1000 1 1999) do set "str=!str! %%i"
set "str=!str: 1= !"

(for /f "tokens=1* delims==" %%i in (d:\SJHY\000001\000001_01.txt) do (  '【标红处000001~100000】
        set "s=!str!"
        for %%k in (%%j) do set "s=!s: %%k=!"
        echo;%%i=!s:~1!
)) > e:\SJHY\000001\000001_01.txt    '【标红处000001~100000】
pause

问题:上述代码中
第6行 如何扩展循环语句为
d:\SJHY\000001\000001_01.txt
d:\SJHY\000002\000002_01.txt
...
d:\SJHY\100000\100000_01.txt

第10行 如何扩展循环语句为
e:\SJHY\000001\000001_01.txt
e:\SJHY\000002\000002_01.txt
...
e:\SJHY\100000\100000_01.txt
作者: qixiaobin0715    时间: 2023-7-10 08:16

不知楼主要做什么。看不出给出的代码与下面1.txt和2.txt有何联系。
作者: 思想之翼    时间: 2023-7-10 08:37

回复 2# qixiaobin0715
感谢关注!
第6行      (for /f "tokens=1* delims==" %%i in (1.txt) do (
第10行    )) > 2.txt
作者: qixiaobin0715    时间: 2023-7-10 09:09

回复 3# 思想之翼
这个大家都看的出来。
1.没明白代码3-4、8-9行在这里起什么作用。
2.1.txt的内容是这样的吗:
  1. d:\SJHY\000001\000001_01.txt
  2. d:\SJHY\000002\000002_01.txt
  3. ...
  4. d:\SJHY\100000\100000_01.txt
复制代码
3.生成2.txt是这样的?
  1. e:\SJHY\000001\000001_01.txt
  2. e:\SJHY\000002\000002_01.txt
  3. ...
  4. e:\SJHY\100000\100000_01.txt
复制代码

作者: 思想之翼    时间: 2023-7-10 09:15

回复 4# qixiaobin0715

txt文件记录内容
王=000 002
五=001 003 005
...
李=002 006

欲取得“=”右侧数值的未出现数(000~999)

结果为
王=001 003 004 005...999
五=000 002 004 006...999
...
李=000 001 003 004 005 007...999
作者: qixiaobin0715    时间: 2023-7-10 09:40

你的意思是:
1.在目录d:\SJHY中有多个子文件夹,每个子文件夹下有一个文本文件;
2.按顶楼代码的方式分别处理这些文本文件,生成多个目标文件,按照上面的目录结构保存到e:\SJHY中。
是这样吗?
作者: 思想之翼    时间: 2023-7-10 10:00

回复 6# qixiaobin0715
是的,谢谢关注!
作者: qixiaobin0715    时间: 2023-7-10 10:14

本帖最后由 qixiaobin0715 于 2023-7-10 10:19 编辑

大致思路是这样的,未测试,有问题可自己修改:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /L %%i in (1000 1 1999) do set "str=!str! %%i"
  4. set "str=!str: 1= !"
  5. for /f "delims=" %%a in ('dir /s /b /a-d *.txt') do (
  6.     md "e:%%~pa" 2>nul
  7.     (for /f "tokens=1* delims==" %%i in ('type "%%a"') do (
  8.         set "s=!str!"
  9.         for %%k in (%%j) do set "s=!s: %%k=!"
  10.         echo;%%i=!s:~1!
  11.     ))>"e:%%~pa%%~nxa"
  12. )
  13. pause
复制代码

作者: qixiaobin0715    时间: 2023-7-10 10:21

把批处理文件放在目录d:\SJHY中
作者: 思想之翼    时间: 2023-7-10 10:43

本帖最后由 思想之翼 于 2023-7-10 11:22 编辑

回复 8# qixiaobin0715
感谢!
作者: qixiaobin0715    时间: 2023-7-10 10:47

你可以小批量的试试。文件多的话,时间就要长一些。
作者: qixiaobin0715    时间: 2023-7-10 10:51

回复 10# 思想之翼
没看到9楼的内容?
作者: qixiaobin0715    时间: 2023-7-10 10:55

本帖最后由 qixiaobin0715 于 2023-7-10 10:57 编辑

e:\SJHY目录不用事先创建,自动生成,请看代码第6行md命令。
如果已创建,可删除这行代码
作者: 思想之翼    时间: 2023-7-10 11:03

本帖最后由 思想之翼 于 2023-7-10 11:22 编辑

回复 13# qixiaobin0715
感谢!
作者: 思想之翼    时间: 2023-7-10 11:13

本帖最后由 思想之翼 于 2023-7-10 11:22 编辑

回复 12# qixiaobin0715
感谢!
作者: qixiaobin0715    时间: 2023-7-10 11:24

回复 15# 思想之翼
子文件夹下有文本文件就可以啊,没看到代码第5行dir命令中加了参数\s吗
作者: 思想之翼    时间: 2023-7-10 11:30

回复 16# qixiaobin0715
感谢!是我思路狭窄了。代码运行正确。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2