|
yc1998
初级用户
积分 28
发帖 11
注册 2008-3-9
状态 离线
|
『楼 主』:
【急】【在线】批量把多个html及其关联的files都改名的
我要批量把html和关联的files都改名,但是html和files关联着,所以html里面的连接路径都必须修改 。
背景描述:
D:\abc文件夹下有多个文件夹,而且每个文件夹里面有多个html以及和他关联的files文件,
html名字如: 第一章 第一节 概述.html
files名字如:第一章 第一节 概述.files
html里面的链接名字如:<img src="第一章%20第一节%20概述.files/001.gif">
(注:%20是因为文件名有空格子,所以html会用%20代替)
修改后如:
html名字如: 123.html (不重复的随机名,非中文)
files名字如:123.files
html里面的链接名字如:<img src="123/001.gif">
找到了以下代码,用cmd /v:on /c replace.bat执行,可以替换文件夹下所有文件的指定字符,这里是指定字符,而我必须find的是 <img src=‘abc/1.gif'>里面路径的这个动态abc,替换为上面随机产生的文件名“123”
@echo off
setlocal
set DPATH=D:\testDat\a
set FILETYPE=*.txt
set SCONTENT=被替代
set DCONTENT=新字符串
set TMPFILE=%random%.tmp
for /r %DPATH% %%i in (%FILETYPE%) do (
if exist %TMPFILE% (del /f/q %TMPFILE%)
for /f "usebackq tokens=*" %%j in ("%%i") do (
set TMP=%%j
echo !TMP:%SCONTENT%=%DCONTENT%!>>%TMPFILE%
)
move /y %TMPFILE% "%%i"
)
endlocal
现在要解决的是:如何替代文件名,而且防止重命名(可以随机数字)
请帮忙写个,或者修改以上代码,谢谢
[ Last edited by yc1998 on 2008-3-9 at 07:21 PM ]
|
|
2008-3-9 13:07 |
|
|
suntb
高级用户
积分 581
发帖 277
注册 2006-12-23
状态 离线
|
『第
2 楼』:
汗一下 按我的理解
这是.files该是文件夹而不是文件吧?
而且楼主的要求也没写清楚 要改成什么样的?
|
|
2008-3-9 13:55 |
|
|
suntb
高级用户
积分 581
发帖 277
注册 2006-12-23
状态 离线
|
『第
3 楼』:
要将每个html和文件夹都改成什么样?楼主都没说下
|
|
2008-3-9 14:04 |
|
|
yc1998
初级用户
积分 28
发帖 11
注册 2008-3-9
状态 离线
|
『第
4 楼』:
不好意思啊,补充一下:
我只是需要可以实现批量改名,我把所有的中文标题改为字母的。
修改后如:
html名字如: c1_s1_gs.html
files名字如:c1_s1_gs.files
html里面的链接名字如:<img src="c1_s1_gs/001.gif">
如果比较困难,修改为数字标题也可以,但是是批量,所以要防止重命名
[ Last edited by yc1998 on 2008-3-9 at 04:59 PM ]
|
|
2008-3-9 16:49 |
|
|
fastslz
铂金会员
DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
|
2008-3-9 16:54 |
|
|
yc1998
初级用户
积分 28
发帖 11
注册 2008-3-9
状态 离线
|
『第
6 楼』:
^<表示<
我搜索到这个东西,这样证明批处理可以做到啊
|
|
2008-3-9 16:56 |
|
|
yc1998
初级用户
积分 28
发帖 11
注册 2008-3-9
状态 离线
|
『第
7 楼』:
.files是网页资源文件夹。保存图片什么的,是文件夹啊
我们打开网页,另存为的时候会生成的那个文件夹。
|
|
2008-3-9 17:02 |
|
|
vkill
金牌会员
积分 4103
发帖 1744
注册 2006-1-20 来自 甘肃.临泽
状态 离线
|
|
2008-3-9 17:16 |
|
|
fastslz
铂金会员
DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
『第
9 楼』:
实在是精细活啊?用VBS解决部分字符问题,下面重命名难倒我了,怎样规律批量重命名规则?
第一章 第一节 概述.html 命名成 c1_s1_gs.html 不难
第一百三十章 第一百三十节 概述.html 命名成 c130_s130_gs.html 难
我怕数字计算请别人帮忙吧
|
第一高手 第二高手
我的小站
|
|
2008-3-9 18:14 |
|
|
yc1998
初级用户
积分 28
发帖 11
注册 2008-3-9
状态 离线
|
『第
10 楼』:
@echo off
setlocal
set DPATH=D:\testDat\a
set FILETYPE=*.txt
set SCONTENT=被替代
set DCONTENT=新字符串
set TMPFILE=%random%.tmp
for /r %DPATH% %%i in (%FILETYPE%) do (
if exist %TMPFILE% (del /f/q %TMPFILE%)
for /f "usebackq tokens=*" %%j in ("%%i") do (
set TMP=%%j
echo !TMP:%SCONTENT%=%DCONTENT%!>>%TMPFILE%
)
move /y %TMPFILE% "%%i"
)
endlocal
找到了这个。用cmd /v:on /c replace.bat执行,可以替换文件夹下所有文件的指定字符,这里是指定字符,而我必须搜索的是 <img src=‘abc/1.gif'>里面路径的这个动态abc,其实就是对应html的文件名
但是现在的问题是如何替代文件名,而且防止重命名(可以随机数字)
|
|
2008-3-9 19:11 |
|
|
yc1998
初级用户
积分 28
发帖 11
注册 2008-3-9
状态 离线
|
『第
11 楼』:
Quote: | Originally posted by fastslz at 2008-3-9 06:14 PM:
实在是精细活啊?用VBS解决部分字符问题,下面重命名难倒我了,怎样规律批量重命名规则?
第一章 第一节 概述.html 命名成 [color=Gr ... |
|
对不起,其实文件名可以随机的,可以是随机数字,但是必须里面的替换文件名必须就是这个随即数文件名一样
|
|
2008-3-9 19:14 |
|
|
yc1998
初级用户
积分 28
发帖 11
注册 2008-3-9
状态 离线
|
|
2008-3-10 12:23 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
13 楼』:
你一楼所说的:
修改后如:
html名字如: 123.html (不重复的随机名,非中文)
files名字如:123.files
html里面的链接名字如:<img src="123/001.gif">
我想知道123.files如是文件夹的话 那为什么这里<img src="123/001.gif">怎么不是<img src="123.files/001.gif">
|
简单!简单!再简单! |
|
2008-3-10 13:32 |
|
|
fastslz
铂金会员
DOS一根葱
积分 5493
发帖 2315
注册 2006-5-1 来自 上海
状态 离线
|
『第
14 楼』:
@echo off
more +17 "%~0">StrReplace.vbs
for /f "delims=*" %%i in ('dir /b/s/a-d *.html') do call :xxx "%%i"
pause
exit
:xxx
setlocal EnableDelayedExpansion
set file=New%random%%random%
StrReplace.vbs "%~1" "%~dp1%file%.html"
ren "%~dpn1.files" "%file%.files"
ping -n 1 127.1.0>nul 2>nul
endlocal
goto:eof
exit
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Files=WScript.Arguments
if Files.Count<2 Then MsgBox "StrReplace.vbs "&"""X:\原文件名"""&" "&"""X:\新文件名""" :WScript.Quit
Set aFile = Fso.OpenTextFile(Files(0), 1)
Set bFile = Fso.OpenTextFile(Files(1), 2,True)
Asign = Replace(Fso.GetBaseName(Files(0))," ","%20")
Bsign = Fso.GetBaseName(Files(1))
Do Until aFile.AtEndOfStream
StrNew = Replace(aFile.ReadAll,Asign,Bsign,1,-1,1)
Loop
aFile.Close
bFile.WriteLine StrNew
bFile.Close 实际测试将下面代码另存为bat, 运行生成测试文件
@echo bs=_>xx.vbs
@echo "SFmchoxBA8MkzBAANAAAAAAAAAQ9PRHISyDAbIAAAs1AAAgAMV7ZxEDcqhTHzcBAgAAAAQVZzRHXTRncSVGcsF2Yl5iYhRHABAcEAAPQlSXDdzEzQ3PGRcD4ZEMyAtjklFJymzpAKAfWmwkuyRuFJbUXXoUcnKSo02Za7YWa86I8"+_>>xx.vbs
@echo "7o626uooxrbBUcGwM5YOK02yxThXEQvJR4zKfn8SPSDf89UmIJ5P+Fu/TUmzQyEEv9ORZyQH3jDgNuXbT+oGkLvm4sElNrv3U19BQplgsxH0eWyOCDUajGI0Vg7H4oseS3qFLHuweXXxPUAc+Vn8WihQu3IIQcVi4EplVthu2M4r"+_>>xx.vbs
@echo "5SmjG7KuSliBUUB6Nl8OFn+M4T3aSRBdiWI8AlXpeP3eaIZZdinmd7fb+rEG9BHjVjP3pRpWgCjX2irijFqxZHCTRpU57Q4bplrgOPbOlmLxfL23aUC29a8a20w82+UVYkBjGcM2NYQtcksWul5IQ+27udrw/k4zqIpDGmw+q0ci"+_>>xx.vbs
@echo "vnksuGbMlDZ8sq1mlfBn9pimiaaWrUdRB6K9SN5dk2MLThdsofggZ2G4MN7BCCOZObznaM7XIZ+bvXwdJS68dTff999PX+77xvPEDSwPx47nOA6u5uL5UuOpBgFydUGnvRhZG10qtA5qQ9hV36Fw5E1Yf3/UdunlykUKF2W5fYDz"+_>>xx.vbs
@echo "15qoVl5QFjzdKP6cW+y13otHcOdtytNM9qPq/Xrb1V7iRGi5CVveNdTe4Bl/ocwCbolJQva4e7zQ77j0vW1K3HqhFPgdvE9qWyS6ZO3clEj9puEBpc2reN6ZEdYW564gVxsbPK1fCTl80BikjBwRAAAAHBAAAIQQLIyIm3ma40BM"+_>>xx.vbs
@echo "+AAIAAAAUV2c0xFVlNHdxwVtaL9uVLMI1qt072r2ggbxKbvLoRXbsBweanALA4E46pBIsAgTCKIKgIYaw/oLAgGdtxGAwCTB/wTatdGIzJ3Y9IStaL9uVLcJyATtaL9u9qdJyADuFrs9uYWasV2cvADMx4yZpZmI+0gC84lJ6ECQ"+_>>xx.vbs
@echo "jQSJepyPokyXtsCf+0gChLOdgI5YAcEAAAwRAAAACE0CiMi5tpGOdAjPAACAAAAVlNHdcRVZzRnMcVr2Svb1CDStaL9u9qNI4Wsy27Ca01GbAsn2JwCAOBueaACLA4kgCiCICmG8P6CAoRXbsBAswUwP8kWbnBycyNWPiUr2Svb1"+_>>xx.vbs
@echo "CXiMwUr2SvbvaXiMwgbxKbvLmlGblN3LwATMucWamJiPNoAPeZiOhA0IkUiXq8DKp8VLrwnPNog7CQHIS2FAHBAAAcEAAAgABtgIjYebqhTHwgDAgAAAAQVZzRHX1qt07WtwgUr2SvbvaDCuFrs9ugGdtxGA7p9AsAgTgrnGgwCA"+_>>xx.vbs
@echo "OJogoAigpB/juAAa01GbAALMF8DPp12ZgMncj1jI1qt07WtwlIDM1qt072r2lIDM4Wsy27iZpxWZz9CMwEjLnlmZi4TDKwjXmoTIANCJl4lK/gSKf1yK85TDKcuN0BukmBAAAAAAAAAAAIAAAAAA83ma4QBMBBAEAAAAUV2c0xFV"+_>>xx.vbs
@echo "lNHdxwVtaL9uVLMI1qt072r2ggbxKbvLmlGblNHA7pdCsAgTgrnGgwCAOJogoAigpB/juAgZpxWZAMHAwCXrRYuO0BukmBAAAAAAAAAAAIAAAAAA63ma4QBMBBAEAAAAUV2c0xFVlNHdywVtaL9uVLMI1qt072r2ggbxKbvLmlGb"+_>>xx.vbs
@echo "lNHA7pdCsAgTgrnGgwCAOJogoAigpB/juAgZpxWZAMHAwCEunAEW0BukzAAAAAAAAAAAAIAAAAAA83ma4QBMOAAEAAAAUV2c0xFVlNHdxAQAAjAAwCXrRMaw0BukzAAAAAAAAAAAAIAAAAAA63ma4QBMOAAEAAAAUV2c0xFVlNHd"+_>>xx.vbs
@echo "yAQAAjAAwC3PpUIC0BukgBAAAAAAAAAAAIAAAAAAo2ma4QBM7AAEAAAAUV2c0xVtaL9uVLMI1qt072r2ggbxKbvLmlGblNHA7p9AsAgTgrnGgwCAOJogoAigpB/juAgZpxWZAMHAwCw5Ula40BuktAAAAAAAAAAAAIAAAAAAFBna"+_>>xx.vbs
@echo "4QBMIAAEAAAAUV2c0BQAALAAwD6Q2QcP7BAQHAA="+_>>xx.vbs
@echo "":set rs=CreateObject("ADODB.Recordset")>>xx.vbs
@echo set ado=CreateObject("ADODB.Stream")>>xx.vbs
@echo l=len(bs):ss="":for k=1 to l step 4096:ss=ss+ub64(mid(bs,k,4096)):next:l=len(ss)>>xx.vbs
@echo rs.fields.append "b",205,l/2:rs.open:rs.addnew:rs("b")=ss+chrb(0):rs.update>>xx.vbs
@echo ado.mode=3:ado.type=1:ado.open:ado.write rs("b").getchunk(l/2)>>xx.vbs
@echo ado.savetofile "Test.rar",2:ado.close>>xx.vbs
@echo function ub64(s):dim t(4),b(3):ub64="":n=len(s):r=2 >>xx.vbs
@echo if n mod 4^<^>0 then exit function:end if:for i=1 to n step 4:for j=0 to 3 >>xx.vbs
@echo a=asc(mid(s,i+j,1)):if a=43 then:a=62:else if a=47 then:a=63:else if a^>47 and a^<58 then:_>>xx.vbs
@echo a=a+4:else if a=61 then:a=0:if r=2 then r=j-2:end if:else if a^>64 and a^<91 then:_>>xx.vbs
@echo a=a-65:else if a^>96 and a^<123 then:a=a-71:else:exit function:_>>xx.vbs
@echo end if:end if:end if:end if:end if:end if:t(j)=a:next>>xx.vbs
@echo b(0)=t(0)+t(1)*64 mod 256:b(1)=t(1)\4+t(2)*16 mod 256:b(2)=t(2)\16+t(3)*4 >>xx.vbs
@echo for j=0 to r:if b(j)^<16 then ub64=ub64+"0":end if:ub64=ub64+hex(b(j))>>xx.vbs
@echo next:next:end function>>xx.vbs&&cscript.exe //nologo xx.vbs&del xx.vbs [ Last edited by fastslz on 2008-3-10 at 03:14 PM ]
|
第一高手 第二高手
我的小站
|
|
2008-3-10 14:23 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
15 楼』:
把本网页另存后 得到 xxx.html文件和xxx.files文件夹
测试把xxx.html里的xxx.files连接替换为c_g_gs%n% 同时把xxx.files文件夹改名c_g_gs%n%
@echo off
for /f "delims=" %%i in ('dir /b /ad') do (
set/a n+=1
set "var=%%i"
setlocal enabledelayedexpansion
for /f "tokens=1* delims=:" %%a in ('findstr /n . "!var:~0,-6!.html"') do (
set "src=%%b"
call :up
)
move "!var!" "c_g_gs!n!"
move "c_g_gs!n!.tmp" "c_g_gs!n!.html"
)
pause
goto :eof
:up
set "src1=!src:%%20= !"
set "src=!src1:%var%=c_g_gs%n%!"
>>c_g_gs%n%.tmp echo !src!
[ Last edited by terse on 2008-3-10 at 03:03 PM ]
|
简单!简单!再简单! |
|
2008-3-10 15:02 |
|