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

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

[复制链接]
发表于 2015-8-12 21:10:01 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码
发表于 2015-8-13 00:29:38 | 显示全部楼层

  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
复制代码
 楼主| 发表于 2015-8-13 13:29:05 | 显示全部楼层
回复 2# 回家路上


    抱歉如果档名要改c1(可用AC,QQ 不用开BAT).open、c2(可用AC 要开BAT).open
    要怎么修改比较好?
发表于 2015-8-13 14:24:28 | 显示全部楼层
回复 3# azraelys


详细描述。
和前面的问题还有关系吗?
 楼主| 发表于 2015-8-13 15:48:07 | 显示全部楼层
回复 4# 回家路上


    抱歉,我是想问档案名称中间有『空白』或是『,』
    一但运行程式就显示命令语法不正确
    有办法处理吗?
发表于 2015-8-13 16:19:20 | 显示全部楼层
回复 5# azraelys


哦,我的错,改下代码

  1. move /y $ "%%i"
复制代码
 楼主| 发表于 2015-8-13 16:27:07 | 显示全部楼层
本帖最后由 azraelys 于 2015-8-13 16:34 编辑

回复 6# 回家路上


   恩 可以了 谢谢大大

   有空的话能帮我看看我1楼写的代码吗
  我用了很久但没办法用c*.open来让他自动寻找相关档名
  是我有地方写错了吗?
发表于 2015-8-13 19:10:01 | 显示全部楼层
回复 7# azraelys


(1)findstr用来查找字符串在行,但是你用来查找当前目录的所有文件,就不合适了吧
        虽然不合适,但可以跟着你的想法往下
  1. findstr /n ".*" %1
复制代码
是查找所有c*.open文件的所有行并且前面加上行号
        所以就得到了所有文件
        但是信息量就有点儿大了

  1.                 文件名:行号:内容
  2.                 文件名:行号:内容
  3.                 文件名:行号:内容
  4.                 文件名:行号:内容
  5.                                 .
  6.                                 .
  7.                                 .
  8.        
复制代码
(2)然后就该解析了
  1. "tokens=1* delims=:"
复制代码
说明,每行数据,只根据第一个冒号”:“分隔成两份
        然后
  1. if "%%j"==""
复制代码
%%j是取【行号:内容】的部分,然后,就没有然后了。

我也是刚学,批处理没有很好的跟错误的方法,所以写的时候
像我刚学不清楚的,就没写一部,都将关键的变量
  1. echo;%变量%
复制代码
输出出来,确认正确了,再将其删掉,然后再往下,不要一顿写。
完事了,一看都不对。这就不好玩了。
 楼主| 发表于 2015-8-13 20:42:31 | 显示全部楼层
本帖最后由 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"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 17:37 , Processed in 0.019491 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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