Board logo

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

作者: hoyu    时间: 2017-1-17 20:01     标题: 批处理如何实现将多个子文件夹下指定txt文本里的指定字符串替换为其他内容?

假如文件夹A下有n个子文件夹A1、A2......An,每个子文件夹中都有一个内容不同的同名文件b.txt,批处理如何实现将所有b.txt文件中的字符123替换为456?
作者: Nsqs    时间: 2017-1-17 20:31

  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
复制代码

作者: hoyu    时间: 2017-1-17 20:51

本帖最后由 hoyu 于 2017-1-17 21:45 编辑

   不会用,求指导, 执行后,什么也没发生?回复 2# Nsqs
作者: Nsqs    时间: 2017-1-17 22:45

回复 3# hoyu


    修改文件夹A为你需要替换的某个文件夹然后执行后会把原来的文件全部替换
作者: hoyu    时间: 2017-1-17 22:57

谢谢,可以了
作者: hoyu    时间: 2017-1-17 23:01

回复 4# Nsqs


谢谢,可以了!


再请教一下,如果子文件夹不止一层,有两三层,或是更多,文件格式是.xml,可以批处理做到吗?
作者: Nsqs    时间: 2017-1-17 23:04

回复 6# hoyu


    b.txt改成.xml 123是你要替换的,456是替换后的字符
作者: ygqiang    时间: 2017-1-18 20:03

本帖最后由 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文件中的某个关键字。

谢谢
作者: ygqiang    时间: 2017-1-18 21:34

回复 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
复制代码

作者: ygqiang    时间: 2017-1-18 23:05

回复 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
复制代码

作者: hoyu    时间: 2017-11-13 22:24     标题: 请问如何用批处理替换不同文件夹中指定同名文件里的指定字符串

本帖最后由 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。




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