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

[文本处理] 请教批处理根椐文本参数添加指定内容

[复制链接]
发表于 2022-7-22 10:59:08 | 显示全部楼层 |阅读模式
同一目录下有四个文本
1.txt
1.ini
2.txt
2.ini

文本1.ini的内容如下
参数a
参数b
参数c
参数d

文本2.ini的内容如下
参数a
参数b
参数c
参数d

其中文本1.txt 及 文本2.txt 未知


现在需要先提取所有本目录下的 .txt 格式的文件名,并输出到3.txt,其内容如下所示
1
2



如果文本 1.ini 且 文本 2.ini 都没有 "参数c" , 则文本3.txt的每行添加空格,再加指定字符串xxx,如下所示
1 xxx
2 xxx

如果文本 1.ini 且 文本 2.ini 都有 "参数c" , 则文本3.txt的每行添加空格,再加指定字符串yyy,如下所示
1 yyy
2 yyy

如果文本 1.ini 有 "参数c" , 文本 2.ini 没有 "参数c" , 则文本3.txt输出,如下所示
1 xxx
2 yyy

如果文本 1.ini 没有 "参数c" , 文本 2.ini 有 "参数c" , 则文本3.txt输出,如下所示
1 yyy
2 xxx
发表于 2022-7-22 13:08:25 | 显示全部楼层
回复 1# 阿一呐法

这个代码实测通过,请您看看可不可以
  1. @Echo Off
  2. Chcp 936 > Nul %= 请确保您的文本是ANSI编码,如果含有Unicode字符,请把936改成65001 =%
  3. @Goto :Main %= 跳转到Main标签 =%

  4. :Main
  5.         Cd /D "%Cd%\Files" %= 您可以把它改成您自己需要的目录 =%

  6.         %= 设置参数3 =%
  7.         Set Var=参数c

  8.         %= 格式化参数3 =%
  9.         Set Var=%Var:"=""%

  10.         %= 您的XXX和YYY文本 =%
  11.         Set Var1=xxx
  12.         Set Var2=yyy

  13.         %= 删除3.Txt =%
  14.         If Exist 3.Txt Del 3.Txt

  15.         %= 清空3.Stf的内容 =%
  16.         Cd. > 3.Stf

  17.         %= 遍历所有Txt文档 =%
  18.         For /F %%I in ('Dir /B *.Txt') Do (
  19.                 >> 3.Stf Echo.%%~nI
  20.         )

  21.         %= 将3.Stf改名3.Txt =%
  22.         Ren 3.Stf 3.Txt

  23.         %= 判断1.Ini中是否有参数3 =%
  24.         Find 1.Ini "%Var%" > Nul 2> Nul
  25.         Set ErrorLevel1=%ErrorLevel%

  26.         %= 判断2.Ini中是否有参数3 =%
  27.         Find 2.Ini "%Var%" > Nul 2> Nul
  28.         Set ErrorLevel2=%ErrorLevel%

  29.         %= 先运算,可以防止后续If 嵌套 =%
  30.         Set /A ErrorLevel3=%ErrorLevel1%+%ErrorLevel2%
  31.         Set /A "ErrorLevel4=%ErrorLevel1%<<%ErrorLevel2%"

  32.         If %ErrorLevel3% Equ 2 (
  33.                 %= 都没有 =%
  34.                 (
  35.                         Echo.1 %Var1%
  36.                         Echo.2 %Var1%
  37.                         Rem 覆盖,如果要追加内容,请将>改为>>
  38.                 ) > 3.Txt
  39.                 @Goto :Next
  40.         ) Else If %ErrorLevel3% Equ 0 (
  41.                 %= 都有 =%
  42.                 (
  43.                         Echo.1 %Var2%
  44.                         Echo.2 %Var2%
  45.                         Rem 覆盖,如果要追加内容,请将>改为>>
  46.                 ) > 3.Txt
  47.                 @Goto :Next
  48.         )

  49.         If %ErrorLevel4% Equ 0 (
  50.                 %= 1.Ini有,2.Ini没有 =%
  51.                 (
  52.                         Echo.1 %Var1%
  53.                         Echo.2 %Var2%
  54.                         Rem 覆盖,如果要追加内容,请将>改为>>
  55.                 ) > 3.Txt
  56.                 @Goto :Next
  57.         ) Else If %ErrorLevel4% Equ 1 (
  58.                 %= 1.Ini没有,2.Ini有 =%
  59.                 (
  60.                         Echo.1 %Var2%
  61.                         Echo.2 %Var1%
  62.                         Rem 覆盖,如果要追加内容,请将>改为>>
  63.                 ) > 3.Txt
  64.                 @Goto :Next
  65.         )
  66. @Goto :Next

  67. :Next
  68.         %= 暂停 =%
  69.         %=此处可以增加您的代码=%
  70.         Echo.已完成,请按任意键退出……
  71.         Pause > Nul
  72. @Exit /B 0
复制代码
 楼主| 发表于 2022-7-22 15:20:38 | 显示全部楼层
回复 2# HOPE2021


    谢谢,试了一下,完全没问题
 楼主| 发表于 2022-7-22 15:30:30 | 显示全部楼层
回复 2# HOPE2021


    可以再延伸一下吗,假如同一目录下有N个不同名字的txt文本。

    而只有部分txt文本有对应的相同名字的ini文件。

    这些ini文件的内容也是只有部分有对应的参数c。

    这种情况怎么弄
发表于 2022-7-22 15:59:08 | 显示全部楼层
回复 4# 阿一呐法

鄙人目前只能做到这个水平了。请您看一下这样可以吗?
  1. @Echo Off
  2. Chcp 936 > Nul %= 请确保您的文本是ANSI编码,如果含有Unicode字符,请把936改成65001 =%
  3. @Goto :Main %= 跳转到Main标签 =%

  4. :Main
  5.         Cd /D "%Cd%\Files" %= 您可以把它改成您自己需要的目录 =%

  6.         %= 设置参数3 =%
  7.         Set Var=参数c

  8.         %= 格式化参数3 =%
  9.         Set Var=%Var:"=""%

  10.         %= 您的XXX和YYY文本 =%
  11.         Set Var1=xxx
  12.         Set Var2=yyy

  13.         %= 清除1.Lst内容 =%
  14.         Cd. > 1.Lst

  15.         %= 遍历所有Txt文档 =%
  16.         SETLOCAL ENABLEDELAYEDEXPANSION
  17.         For /F %%I in ('Dir /B *.Txt') Do (
  18.                 Find %%~nI.Ini "%Var%" > Nul 2> Nul
  19.                 If !ErrorLevel! Equ 0 (
  20.                         %= 如果查找到 =%
  21.                         %= 写入XXX =%
  22.                         Rem Echo.%%~nI %Var1%
  23.                         >> 1.Lst Echo.%%~nI %Var1%
  24.                 )
  25.                 If !ErrorLevel! Equ 1 (
  26.                         %= 如果没有查找到 =%
  27.                         %= 写入XXX =%
  28.                         Rem Echo.%%~nI %Var2%
  29.                         >> 1.Lst Echo.%%~nI %Var2%
  30.                 )
  31.         )
  32.         ENDLOCAL
  33. @Goto :Next

  34. :Next
  35.         %= 暂停 =%
  36.         %=此处可以增加您的代码=%
  37.         Echo.已完成,请按任意键退出……
  38.         Pause > Nul
  39. @Exit /B 0
复制代码
 楼主| 发表于 2022-7-22 19:46:48 | 显示全部楼层
回复 5# HOPE2021


    反复测试了一下,目录下有多个ini文件的时候,只会以第一个查找到的ini,来做判断,不过还是谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 20:33 , Processed in 0.019020 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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