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

[文件操作] [已解决]批处理怎样把文件夹的文件内容批量替换?

[复制链接]
发表于 2011-6-1 06:44:14 | 显示全部楼层 |阅读模式
本帖最后由 w1983912 于 2011-6-1 18:03 编辑

同一目录下有 4文件夹和a.txt

把文件夹里的所有"游戏"字符串  用@@后面的对应替换掉

4个文件夹  @@前面的是文件夹名  只含数字字母      也就是 xmyyy2y   xx55lud   5abccc  pxeke5xxx  这4个文件夹
  @@后面的需要用来覆盖"游戏"字符串的词    只含中文数字字母
"游戏"字符串是这4个文件夹下的固定的x.php文件里都有的字符串  有好几个这样的   全部覆盖替换掉

a.txt内容:
xmyyy2y@@知道   
xx55lud@@合同x路
5abccc@@人民
pxeke5xxx@@旅游abcd

bat 1. 得到
比如文件夹xmyyy2y下的x.php里的所有"游戏"变成"知道"
       文件夹xx55lud下的x.php里的所有"游戏"变成"合同x路"


实际上有很多个这样的文件夹 以上只是以4个举个例子  a.txt的行数和文件夹数相等 都排好了     x.php目前是gbk    如果是utf-8能否批处理呢

------------------------------------------------------------------------------
BAT  2:   同一目录下有:
文件夹名  只含数字字母      也就是 xmyyy2y   xx55lud   5abccc  pxeke5xxx  这4个文件夹
a.txt内容:
xmyyy2y
xx55lud
5abccc
pxeke5xxx
"1234567"字符串是这4个文件夹下的固定的x.php文件里都有的字符串  一个x.php里只有1个“1234567”
bat2A:   1234567覆盖替换掉变成随机的2位数字     如最小的是10   最大是99      
bat2B:   1234567 覆盖替换掉变成随机的3位数字     如最小的是100  最大是999

以上一共3个bat
希望哪位朋友能帮帮我 谢谢了

评分

参与人数 1PB +2 收起 理由
zm900612 + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-6-1 09:25:12 | 显示全部楼层
你PHP不是很牛么,怎么不用PHP
发表于 2011-6-1 10:22:23 | 显示全部楼层
本帖最后由 batman 于 2011-6-1 10:26 编辑

bat1

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2 delims=@" %%a in (a.txt) do (
  3.      for %%c in ("%%a\*.php") do (
  4.           (for /f "usbackq delims=" %%d in ("%%~dpnxc") do set "str=%%d"&echo !str:游戏=%%b!)>$
  5.           move $ "%%~dpnxc"
  6.     )
  7. )               
复制代码
bat2(bat3一样,自己改下随机中的数)

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3.     for %%b in ("%%a\*.php") do (
  4.          set /a a=!random!%%90+10
  5.          (for /f "usbackq delims=" %%c in ("%%~dpnxb") do (
  6.                set "str=%%c"
  7.                for %%c in (!a!) do echo !str:1234567=%%c!
  8.          ))>$
  9.          move $ "%%~dpnxb"
  10.      )
  11. )
  12.            
复制代码
发表于 2011-6-1 10:58:41 | 显示全部楼层
考虑批处理不能正确处理特殊字符,再给出vbs方案:

  1. Dim vbstr, fso, file, folder, choice, str, rpstr
  2. Do Until choice = 1 Or choice =2
  3.   choice = InputBox("请选择模式:1.固定替换 2.随机替换")
  4. Loop
  5. If choice = 1 Then
  6.   str = "游戏"
  7.   Else
  8.   str = "1234567"
  9. End If
  10. Set fso = CreateObject("scripting.filesystemobject")
  11. Set ws = CreateObject("wscript.shell")
  12. For Each folder In Split(fso.OpenTextFile("a.txt", 1).ReadAll(), vbCrLf)
  13.   If choice = 1 Then
  14.     folder = Split(folder, "@")(0)
  15.     rpstr = Split(folder, "@")(1)
  16.     Else
  17.     Randomize
  18.     rpstr = Int((Rnd*90)) + 10 '随机数自己改
  19.   End If
  20.   For Each file In fso.GetFolder(ws.CurrentDirectory & "" & folder).Files
  21.     If LCase(fso.GetExtensionName(file)) = "php" Then
  22.       vbstr = Replace(fso.OpenTextFile(file, 1).ReadAll(), str, rpstr)
  23.       fso.OpenTextFile(file, 2, 1).Write vbstr
  24.     End If
  25.   Next
  26. Next
  27. Set ws = Nothing
  28. Set fso = Nothing
复制代码
 楼主| 发表于 2011-6-1 16:41:23 | 显示全部楼层
谢谢各位的关注 谢谢batman辛苦帮我写的代码

我没学过php 只能用php简单的处理一些知道的,只要能实现,就用哪个能实现的,知识有限,每种语言都不一样的,各有所长,也不可互相替代

以上batman的代码 我的电脑 执行2个bat后 所有的php文件都为空 没有一个字符了  vbs的1和2都执行出错   电脑1个多月没关了  我再换个机器测试下好了
发表于 2011-6-1 16:57:10 | 显示全部楼层
5# w1983912

.....php 能直接匹配  并输出或调用   10行代码都不到
w1983912 发表于 2011-6-1 06:56


我记得这是你说的
 楼主| 发表于 2011-6-1 16:57:49 | 显示全部楼层
经过2台电脑测试  结果仍然如此 很奇怪  望batman 继续帮我修改一下  应该不是大问题  辛苦了
发表于 2011-6-1 17:21:23 | 显示全部楼层
bat1.php

  1. <?php
  2. $in = fopen('a.txt', 'rb');
  3. if (!$in) die();
  4. while (!feof($in)) {
  5.         $str = trim(fgets($in));
  6.         $arr = explode('@@', $str);
  7.         $path = $arr[0] . '/x.php';
  8.         $content = file_get_contents($path);
  9.         $content = str_replace('游戏', $arr[1], $content);
  10.         file_put_contents($path, $content);
  11. }
  12. fclose($in);
  13. ?>
复制代码

评分

参与人数 1技术 +1 收起 理由
zm900612 + 1 不局限于bat,扬长避短

查看全部评分

发表于 2011-6-1 17:26:09 | 显示全部楼层
bat2a.php

  1. <?php
  2. $in = fopen('a.txt', 'rb');
  3. if (!$in) die();
  4. while (!feof($in)) {
  5.         $str = trim(fgets($in));
  6.         $path = $str . '/x.php';
  7.         $n = rand(10, 99);
  8.         $content = file_get_contents($path);
  9.         $content = str_replace('1234567', $n, $content);
  10.         file_put_contents($path, $content);
  11. }
  12. fclose($in);
  13. ?>
复制代码
发表于 2011-6-1 17:26:40 | 显示全部楼层
bat2b.php

  1. <?php
  2. $in = fopen('a.txt', 'rb');
  3. if (!$in) die();
  4. while (!feof($in)) {
  5.         $str = trim(fgets($in));
  6.         $path = $str . '/x.php';
  7.         $n = rand(100, 999);
  8.         $content = file_get_contents($path);
  9.         $content = str_replace('1234567', $n, $content);
  10.         file_put_contents($path, $content);
  11. }
  12. fclose($in);
  13. ?>
复制代码
 楼主| 发表于 2011-6-1 17:52:27 | 显示全部楼层
OK  3个PHP代码 通过GBK 和utf-8   看来也是位PHP达人啊   
建议bat论坛 开通其他语言的 广增网友  人多力量更大 这个论坛能得到有用的回答  目前只佩服bat论坛
挂点广告也能用于服务器的维护成本 对大家都好
    以后bat  vbs asp  php  哪个好用 用哪个  
谢谢大家关注  和特别感谢2位回答的朋友 demon 和batman   辛苦了
发表于 2011-6-1 18:13:30 | 显示全部楼层
11# w1983912
bat  vbs 根本无法和 PHP 同日而语
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 10:13 , Processed in 0.020173 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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