[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

同一目录下有四个文本
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

回复 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
复制代码
Why join the navy, if you can be a pirate? - Steve Jobs

TOP

回复 2# HOPE2021


    谢谢,试了一下,完全没问题

TOP

回复 2# HOPE2021


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

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

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

    这种情况怎么弄

TOP

回复 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
复制代码
Why join the navy, if you can be a pirate? - Steve Jobs

TOP

回复 5# HOPE2021


    反复测试了一下,目录下有多个ini文件的时候,只会以第一个查找到的ini,来做判断,不过还是谢谢

TOP

返回列表