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

[文本处理] 批处理如何实现将多个子文件夹下指定txt文本里的指定字符串替换为其他内容?

[复制链接]
发表于 2017-1-17 20:01:25 | 显示全部楼层 |阅读模式
假如文件夹A下有n个子文件夹A1、A2......An,每个子文件夹中都有一个内容不同的同名文件b.txt,批处理如何实现将所有b.txt文件中的字符123替换为456?
发表于 2017-1-17 20:31:02 | 显示全部楼层
  1. ' 2>nul&cls&dir /s/b/a-d "A文件夹\b.txt"|cscript -nologo -e:"vbs" "%~0"&exit
  2. set fso=CreateObject("Scripting.FileSystemObject")
  3. set ws=wsh.stdin
  4. do
  5.         f=ws.readline
  6.         read=fso.opentextfile(f).readall
  7.         result=replace(read,"123","456")
  8.         fso.createtextfile(f).write result
  9. loop until ws.atendofstream
复制代码
 楼主| 发表于 2017-1-17 20:51:58 | 显示全部楼层
本帖最后由 hoyu 于 2017-1-17 21:45 编辑

   不会用,求指导, 执行后,什么也没发生?回复 2# Nsqs
发表于 2017-1-17 22:45:33 | 显示全部楼层
回复 3# hoyu


    修改文件夹A为你需要替换的某个文件夹然后执行后会把原来的文件全部替换
 楼主| 发表于 2017-1-17 22:57:36 | 显示全部楼层
谢谢,可以了
 楼主| 发表于 2017-1-17 23:01:01 | 显示全部楼层
回复 4# Nsqs


谢谢,可以了!


再请教一下,如果子文件夹不止一层,有两三层,或是更多,文件格式是.xml,可以批处理做到吗?
发表于 2017-1-17 23:04:12 | 显示全部楼层
回复 6# hoyu


    b.txt改成.xml 123是你要替换的,456是替换后的字符
发表于 2017-1-18 20:03:59 | 显示全部楼层
本帖最后由 ygqiang 于 2017-1-18 21:00 编辑

回复 2# Nsqs


    你好。你这个bat代码,如何与下面的代码合并成1个bat呢?
  1. @echo off&Setlocal EnableDelayedExpansion

  2. set/p useraa=(输入数字,并按回车键):
  3. set useraa=user%useraa%
  4. echo 变量:%useraa%
  5. pause
复制代码
并且要将你的代码中的456,换成这个变量:%useraa%

就是说:bat代码中,手动输入1个变量值,传送给vbs。
最终实现:用手动输入的变量值,替换某个txt文件中的某个关键字。

谢谢
发表于 2017-1-18 21:34:21 | 显示全部楼层
回复 2# Nsqs


    这个代码,可以将bat的变量,传递给vbs
vbs,如何实现将txt文件中的关键字替换成变量呢?
  1. @echo off&Setlocal EnableDelayedExpansion

  2. set/p useraa=(输入数字,并按回车键):
  3. set useraa=user%useraa%
  4. echo 变量:%useraa%
  5. pause
  6. cscript //nologo SayHello.vbs "%useraa%"

  7. pause
复制代码
vbs获取bat的变量代码如下:
  1. ' 得到参数对象
  2. Set args = WScript.Arguments
  3. ' 如果参数个数是一个,正常运行,否则提示错误信息并退出。
  4. If args.Count = 1 Then
  5.   ' 得到第一个变量参数name
  6. name = WScript.Arguments(0)
  7.   ' 在标准输出中,即控制台的 通道1 输出一行文字
  8.   WScript.StdOut.WriteLine name & ",你好。"
  9. WScript.Echo name
  10. Else
  11.   ' 在标准错误中,即控制台的 通道2 输出一行文字
  12.   WScript.StdErr.WriteLine "参数个数不为1,请重试。"
  13.   ' 退出程序
  14.   WScript.Quit
  15. End If
复制代码
发表于 2017-1-18 23:05:51 | 显示全部楼层
回复 2# Nsqs


    麻烦你了。已经解决。。
  1. ' 2>nul&cls&set/p useraa=(输入数字,并按回车键):
  2. ' 2>nul&cls&set useraa=user%useraa%
  3. ' 2>nul&cls&echo 修改为:%useraa%&pause&echo %useraa%>$$

  4. ' 2>nul&cls&dir /s/b/a-d "c:\client\new.bat"|cscript -nologo -e:"vbs" "%~0"&
  5. ' 2>nul&cls&start "" "c:\client\new.bat" &1pause&exit

  6. set fso=CreateObject("Scripting.FileSystemObject")
  7. set ws=wsh.stdin
  8. read0=fso.opentextfile("$$").readall
  9. read0=left(read0,len(read0)-1)
  10. 'msgbox read0

  11. do
  12.         f=ws.readline
  13.         read=fso.opentextfile(f).readall
  14.         result=replace(read,"user231",read0)
  15.         fso.createtextfile(f).write result
  16. loop until ws.atendofstream
复制代码
 楼主| 发表于 2017-11-13 22:24:55 | 显示全部楼层

请问如何用批处理替换不同文件夹中指定同名文件里的指定字符串

本帖最后由 pcl_test 于 2017-11-14 00:26 编辑

文件夹A下有子文件夹a1、a2、a3.....,每个子文件夹a1、a2、a3.....中都有同名xml文件b.xml。
请问如何用bat批处理将所有b.xml文件中的文本1-2-3-4替换为a-b-c-d,修改后文件名仍为b.xml。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 03:13 , Processed in 0.021723 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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