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

[文本处理] 【已解决】批处理如何修改给定文件中文字(多档案)?

本帖最后由 azraelys 于 2015-8-13 16:29 编辑

我有几个文件c1(qq).open、c1(wt).open、c2(qq).open、c2(wt).open
可以用TXT开启
想把里面其中一段文字『auth-』替换成『auth-user-pass abc.txt』
其它都不变
档名也希望不变

請大神幫幫忙
ps.能否修改成c*.open让它自动寻找相关档名?

这是我之前尝试写的
但不知道为什么不支援万用字元
要改哪里比较好
  1. @echo off
  2. call:sub "c*.open" "auth-" "auth-user-pass abc.txt"
  3. exit
  4. :sub
  5. for /f "tokens=1* delims=:" %%i in ('findstr /n ".*" %1') do (
  6.     if "%%j"=="" (echo.>>tmp) else (
  7.           echo %%j|find %2>nul&&(call echo %~3>>tmp)||(echo %%j>>tmp)
  8.     )
  9. )
  10. copy tmp %1 /y >nul&&del tmp
复制代码

本帖最后由 azraelys 于 2015-8-13 20:43 编辑

回复 8# 回家路上

因为如果我以call:sub “c*.open”执行的话
它也只给我新增一个cmp.open档把全部OPEN档所有的内容都集合在一起而已(还加入了行号w)
没有像你写的批处理那样去每个档案做修改

  所以以我的方式只能使用以下方式慢慢处理?
  1. call:sub "c1(qq).open" "auth-" "auth-user-pass abc.txt"
  2. call:sub "c1(wt).open" "auth-" "auth-user-pass abc.txt"
复制代码

TOP

回复 7# azraelys


(1)findstr用来查找字符串在行,但是你用来查找当前目录的所有文件,就不合适了吧
        虽然不合适,但可以跟着你的想法往下
  1. findstr /n ".*" %1
复制代码
是查找所有c*.open文件的所有行并且前面加上行号
        所以就得到了所有文件
        但是信息量就有点儿大了
  1. 文件名:行号:内容
  2. 文件名:行号:内容
  3. 文件名:行号:内容
  4. 文件名:行号:内容
  5. .
  6. .
  7. .
复制代码
(2)然后就该解析了
  1. "tokens=1* delims=:"
复制代码
说明,每行数据,只根据第一个冒号”:“分隔成两份
        然后
  1. if "%%j"==""
复制代码
%%j是取【行号:内容】的部分,然后,就没有然后了。

我也是刚学,批处理没有很好的跟错误的方法,所以写的时候
像我刚学不清楚的,就没写一部,都将关键的变量
  1. echo;%变量%
复制代码
输出出来,确认正确了,再将其删掉,然后再往下,不要一顿写。
完事了,一看都不对。这就不好玩了。

TOP

本帖最后由 azraelys 于 2015-8-13 16:34 编辑

回复 6# 回家路上


   恩 可以了 谢谢大大

   有空的话能帮我看看我1楼写的代码吗
  我用了很久但没办法用c*.open来让他自动寻找相关档名
  是我有地方写错了吗?

TOP

回复 5# azraelys


哦,我的错,改下代码
  1. move /y $ "%%i"
复制代码

TOP

回复 4# 回家路上


    抱歉,我是想问档案名称中间有『空白』或是『,』
    一但运行程式就显示命令语法不正确
    有办法处理吗?

TOP

回复 3# azraelys


详细描述。
和前面的问题还有关系吗?

TOP

回复 2# 回家路上


    抱歉如果档名要改c1(可用AC,QQ 不用开BAT).open、c2(可用AC 要开BAT).open
    要怎么修改比较好?

TOP

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /a-d /b /s c*.open') do (
  3. (for /f "usebackq delims=" %%a in ("%%i") do (
  4. set a=%%a
  5. echo;!a:auth-=auth-user-pass abc.txt!
  6. ))>$
  7. move /y $ %%i
  8. )
  9. pause & exit /b
复制代码

TOP

返回列表