Board logo

标题: [文件操作] [已解决]批处理怎样把文件夹的文件内容批量替换? [打印本页]

作者: w1983912    时间: 2011-6-1 06:44     标题: [已解决]批处理怎样把文件夹的文件内容批量替换?

本帖最后由 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
希望哪位朋友能帮帮我 谢谢了
作者: Demon    时间: 2011-6-1 09:25

你PHP不是很牛么,怎么不用PHP
作者: batman    时间: 2011-6-1 10:22

本帖最后由 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.            
复制代码

作者: batman    时间: 2011-6-1 10:58

考虑批处理不能正确处理特殊字符,再给出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
复制代码

作者: w1983912    时间: 2011-6-1 16:41

谢谢各位的关注 谢谢batman辛苦帮我写的代码

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

以上batman的代码 我的电脑 执行2个bat后 所有的php文件都为空 没有一个字符了  vbs的1和2都执行出错   电脑1个多月没关了  我再换个机器测试下好了
作者: Demon    时间: 2011-6-1 16:57

5# w1983912

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


我记得这是你说的
作者: w1983912    时间: 2011-6-1 16:57

经过2台电脑测试  结果仍然如此 很奇怪  望batman 继续帮我修改一下  应该不是大问题  辛苦了
作者: Demon    时间: 2011-6-1 17:21

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

作者: Demon    时间: 2011-6-1 17:26

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

作者: Demon    时间: 2011-6-1 17:26

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

作者: w1983912    时间: 2011-6-1 17:52

OK  3个PHP代码 通过GBK 和utf-8   看来也是位PHP达人啊   
建议bat论坛 开通其他语言的 广增网友  人多力量更大 这个论坛能得到有用的回答  目前只佩服bat论坛
挂点广告也能用于服务器的维护成本 对大家都好
    以后bat  vbs asp  php  哪个好用 用哪个  
谢谢大家关注  和特别感谢2位回答的朋友 demon 和batman   辛苦了
作者: Demon    时间: 2011-6-1 18:13

11# w1983912
bat  vbs 根本无法和 PHP 同日而语




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