标题: [文件操作] [已解决]批处理怎样把文件夹的文件内容批量替换? [打印本页]
作者: 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- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1,2 delims=@" %%a in (a.txt) do (
- for %%c in ("%%a\*.php") do (
- (for /f "usbackq delims=" %%d in ("%%~dpnxc") do set "str=%%d"&echo !str:游戏=%%b!)>$
- move $ "%%~dpnxc"
- )
- )
复制代码
bat2(bat3一样,自己改下随机中的数)- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (a.txt) do (
- for %%b in ("%%a\*.php") do (
- set /a a=!random!%%90+10
- (for /f "usbackq delims=" %%c in ("%%~dpnxb") do (
- set "str=%%c"
- for %%c in (!a!) do echo !str:1234567=%%c!
- ))>$
- move $ "%%~dpnxb"
- )
- )
-
复制代码
作者: batman 时间: 2011-6-1 10:58
考虑批处理不能正确处理特殊字符,再给出vbs方案:- Dim vbstr, fso, file, folder, choice, str, rpstr
- Do Until choice = 1 Or choice =2
- choice = InputBox("请选择模式:1.固定替换 2.随机替换")
- Loop
- If choice = 1 Then
- str = "游戏"
- Else
- str = "1234567"
- End If
- Set fso = CreateObject("scripting.filesystemobject")
- Set ws = CreateObject("wscript.shell")
- For Each folder In Split(fso.OpenTextFile("a.txt", 1).ReadAll(), vbCrLf)
- If choice = 1 Then
- folder = Split(folder, "@")(0)
- rpstr = Split(folder, "@")(1)
- Else
- Randomize
- rpstr = Int((Rnd*90)) + 10 '随机数自己改
- End If
- For Each file In fso.GetFolder(ws.CurrentDirectory & "\" & folder).Files
- If LCase(fso.GetExtensionName(file)) = "php" Then
- vbstr = Replace(fso.OpenTextFile(file, 1).ReadAll(), str, rpstr)
- fso.OpenTextFile(file, 2, 1).Write vbstr
- End If
- Next
- Next
- Set ws = Nothing
- 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- <?php
- $in = fopen('a.txt', 'rb');
- if (!$in) die();
- while (!feof($in)) {
- $str = trim(fgets($in));
- $arr = explode('@@', $str);
- $path = $arr[0] . '/x.php';
- $content = file_get_contents($path);
- $content = str_replace('游戏', $arr[1], $content);
- file_put_contents($path, $content);
- }
- fclose($in);
- ?>
复制代码
作者: Demon 时间: 2011-6-1 17:26
bat2a.php- <?php
- $in = fopen('a.txt', 'rb');
- if (!$in) die();
- while (!feof($in)) {
- $str = trim(fgets($in));
- $path = $str . '/x.php';
- $n = rand(10, 99);
- $content = file_get_contents($path);
- $content = str_replace('1234567', $n, $content);
- file_put_contents($path, $content);
- }
- fclose($in);
- ?>
复制代码
作者: Demon 时间: 2011-6-1 17:26
bat2b.php- <?php
- $in = fopen('a.txt', 'rb');
- if (!$in) die();
- while (!feof($in)) {
- $str = trim(fgets($in));
- $path = $str . '/x.php';
- $n = rand(100, 999);
- $content = file_get_contents($path);
- $content = str_replace('1234567', $n, $content);
- file_put_contents($path, $content);
- }
- fclose($in);
- ?>
复制代码
作者: 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://www.bathome.net/) |
Powered by Discuz! 7.2 |