马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):0 g5 P. r, q: y3 T5 S(欢迎访问老王论坛:laowang.vip)
4 ?5 z) L0 {3 K: {4 A
, o. s! |+ G" y+ M/ K' 修改文件后缀名.vbs; o* ]+ `2 a4 D(欢迎访问老王论坛:laowang.vip)
'9 R* `, m( q5 U. u(欢迎访问老王论坛:laowang.vip)
' 功能说明:6 ?' ]0 x$ f9 x5 r" w(欢迎访问老王论坛:laowang.vip)
' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。
) H+ H$ p- }0 i6 `# t7 i J' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。
- ?9 e1 Q$ q% b* X6 S. @5 [2 M'
( p; o* T8 b' H( s) x3 ^' 使用说明:3 n# i! n8 N4 z6 ~(欢迎访问老王论坛:laowang.vip)
' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。/ P( p" h! B/ i9 t0 c(欢迎访问老王论坛:laowang.vip)
' 2. 双击运行脚本或通过命令行运行。
3 p7 T k8 h u9 a4 V' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。
. F i7 b. `6 T+ G. n" S2 p' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。
+ c2 O3 y% `; O' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。
4 f. z$ k! i J; A1 M' 6. 完成后,脚本会弹出消息框提示操作已成功完成。
8 p0 r' i( J7 Y* q6 t+ z
. X! T# S8 ], v9 Q0 S9 TOption Explicit3 ~7 G) K1 E# R2 n(欢迎访问老王论坛:laowang.vip)
- e5 w' P B; c5 F' E1 q# A(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的路径
6 O' x0 x4 t1 \Dim folderPath
6 B, d$ u/ d' ], QfolderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")4 @0 \1 z* A" @% F) _5 U1 m(欢迎访问老王论坛:laowang.vip)
# q( O( @ p! K; L0 P* J) z(欢迎访问老王论坛:laowang.vip)
' 获取用户输入的新文件后缀名(不包含点)! G% [$ _# m; K( @1 ?(欢迎访问老王论坛:laowang.vip)
Dim newExtension3 ` m: c: j3 y! T9 ~% m/ h' f# p9 t(欢迎访问老王论坛:laowang.vip)
newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")1 W5 E: z2 {6 i(欢迎访问老王论坛:laowang.vip)
9 x* j p+ `9 s' t u. U' 如果用户取消了输入框,则退出脚本
& p- l d T: x& v; X6 aIf newExtension = "" Then' _; j, {( H' w# y8 U( `4 Y4 W. J8 y(欢迎访问老王论坛:laowang.vip)
MsgBox "操作已取消。", vbInformation, "信息"2 i; L' L/ @# @% I6 D6 m(欢迎访问老王论坛:laowang.vip)
WScript.Quit$ h3 D* g* e. F2 m' \) n(欢迎访问老王论坛:laowang.vip)
End If+ m5 H( Y' _$ U- t" J(欢迎访问老王论坛:laowang.vip)
, I7 i6 y( L+ \$ n& Q5 L2 P6 t! ~' 确保新的后缀名不包含点(.)
+ M7 P9 H7 p7 l* Y. T/ ^9 XIf InStr(newExtension, ".") > 0 Then
4 t5 [: R% _% h8 V( @ MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"! w/ c& A& k1 ~' r% ~+ K# y(欢迎访问老王论坛:laowang.vip)
WScript.Quit F6 x9 k5 r @( M' C(欢迎访问老王论坛:laowang.vip)
End If
* Y9 J' ^$ A* L# | Q2 w9 B( c1 n8 b" E(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象
3 X/ R( N' p1 s7 k) uDim fso, folder, subFolder) ~6 A3 Q+ C# c4 ~. @(欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject")0 e- Z6 s1 |3 T) S) T- ?(欢迎访问老王论坛:laowang.vip)
0 F# G. ]* Y' ^, F5 F1 g' 获取当前目录的 Folder 对象
* y+ ~4 M# P5 g( T" Z) kSet folder = fso.GetFolder(folderPath)
, U* R" r% x9 O/ I3 Q* S1 K
8 y2 i4 _* h1 s2 K! [' 检查当前目录是否包含子目录
: Y: r6 ?3 z: S/ \8 U9 J1 K8 oDim hasSubFolders( F4 H1 e8 H+ F& f0 B4 l(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 0% N, A& s \% y) V6 B(欢迎访问老王论坛:laowang.vip)
$ w5 N( d" Z2 I* u6 b, m(欢迎访问老王论坛:laowang.vip)
' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件
+ u8 ?9 n; {7 i8 [Dim modifySubFolders
9 [! D& d$ k N: u' X( z& AIf hasSubFolders Then
! K+ M- \% i- l8 P modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
+ p7 U& R# V' KEnd If' B4 d4 g6 r0 i7 S# @, t(欢迎访问老王论坛:laowang.vip)
$ M5 m/ n: Z1 R3 Q' C' 处理当前目录中的所有文件
4 x* @- V9 M8 m" U" W( v% jCall ProcessFiles(folder, newExtension)
7 O8 L2 F; s% k$ Q$ e
) T- ]% P% M$ w" ^& I* h' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件
7 x8 o+ u9 m; I7 z& X- Y% ^If hasSubFolders And modifySubFolders = vbYes Then8 r- O. S0 U# \4 H8 t. Q( w v' U$ i+ j(欢迎访问老王论坛:laowang.vip)
For Each subFolder In folder.SubFolders' O2 p5 _, O" t, ^! x(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(subFolder, newExtension)
% D8 p. ]3 t4 z9 z8 u Next/ W8 D5 h+ Q2 y8 v& c+ u(欢迎访问老王论坛:laowang.vip)
End If
. k: S; c2 k: [2 W8 F B7 T
9 }( _) Z2 `/ c' 提示用户操作完成6 ^3 j/ x4 M1 o. Q/ }0 T(欢迎访问老王论坛:laowang.vip)
MsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"6 ?0 {- a$ X7 N! m* x(欢迎访问老王论坛:laowang.vip)
' o" o# M! w0 O! i! f; m9 i" A(欢迎访问老王论坛:laowang.vip)
' 处理指定目录中的文件的子程序
+ v- q1 n9 E, I {Sub ProcessFiles(targetFolder, newExtension)) v" r8 F# X" L(欢迎访问老王论坛:laowang.vip)
Dim file, oldName, baseName, currentExtension, newName, newFileName, counter5 j4 T9 [8 r3 W, L$ y |(欢迎访问老王论坛:laowang.vip)
Dim nameDict
$ |$ K/ a% c1 A/ |$ [4 j* {# D* s
, e6 s6 a, r5 j( p ' 创建一个字典对象,用于存储当前目录内的文件名 I1 B+ [# X( Z9 B5 p- W0 K; S2 F(欢迎访问老王论坛:laowang.vip)
Set nameDict = CreateObject("Scripting.Dictionary")% v) N4 ?2 a. o(欢迎访问老王论坛:laowang.vip)
' f% j: K" n- c8 l& T(欢迎访问老王论坛:laowang.vip)
' 遍历指定目录下的所有文件% o, f( x6 z6 [$ K. b) G(欢迎访问老王论坛:laowang.vip)
For Each file In targetFolder.Files
9 {/ E$ h7 G1 W! r! W, O' r4 `6 u ' 跳过后缀名为 .vbs 的文件
* h% t6 L* F! \. w' [. H If LCase(fso.GetExtensionName(file)) <> "vbs" Then4 t* V; ^- i2 J& |, T: e(欢迎访问老王论坛:laowang.vip)
' 获取文件的旧名称、基础名称和当前后缀名 ?% ]; s, {# ~& s+ h* N4 [(欢迎访问老王论坛:laowang.vip)
oldName = file.Name6 o/ O* c( ]0 r! q( L( a3 F0 ]' E(欢迎访问老王论坛:laowang.vip)
baseName = fso.GetBaseName(file)6 g5 S x& F+ U7 e! r$ @* g# I' `) t(欢迎访问老王论坛:laowang.vip)
currentExtension = LCase(fso.GetExtensionName(file))# M5 X7 P# k; j7 X7 V6 |4 {* N. Z(欢迎访问老王论坛:laowang.vip)
, Q; |6 U- t+ ]: a ' 如果当前后缀名与新后缀名不同,则进行重命名% Q0 m5 l$ c6 W" K(欢迎访问老王论坛:laowang.vip)
If currentExtension <> LCase(newExtension) Then5 H$ x% U8 |1 _3 M6 F1 h7 f(欢迎访问老王论坛:laowang.vip)
' 创建新的文件名
# ~7 j3 G' y0 t, B2 k; [ newName = baseName & "." & newExtension) X( P2 H* w, ~- Q, r2 c(欢迎访问老王论坛:laowang.vip)
0 J. w. V5 _3 |& ~2 E9 W ' 检查是否已有同名文件,如果有,则处理重名
9 l% t/ [" m% r g4 l newFileName = newName
3 \8 f8 f$ L9 V, H, t: Q counter = 1
0 b. g, g# y8 ?; N3 D( C* W7 P ' 确保新的文件名唯一
5 O; x, I! y: T' h# d2 q/ `, M While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)' W3 l4 ^+ s" k) {(欢迎访问老王论坛:laowang.vip)
newFileName = baseName & "(" & counter & ")." & newExtension
7 ]2 S4 I9 l+ b7 V8 { counter = counter + 13 \( T8 }) L& v. L(欢迎访问老王论坛:laowang.vip)
Wend
$ p3 u/ _ v# s' T" X& g2 \* `1 @+ T: z(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名
* t0 D3 ?. Z) ]6 P( m nameDict.Add newFileName, True
$ L7 F- K- k6 D7 c" c, |
. B! c4 B5 ~: ~ n) s& q: v+ ?# E ' 重命名文件; Z2 H1 P5 l2 l(欢迎访问老王论坛:laowang.vip)
file.Name = newFileName2 w/ _1 ~5 ^' a% \, N(欢迎访问老王论坛:laowang.vip)
End If
1 N0 v0 d# r' U) f End If
( K+ R: C: ]3 v# Z Next1 w4 U/ T% @) L7 @8 `(欢迎访问老王论坛:laowang.vip)
End Sub
$ h6 G4 W8 H8 c' p ^
, L; m4 b$ ~- L0 W# D+ t- @. e+ C. b, S2 m: D(欢迎访问老王论坛:laowang.vip)
. | x( ^1 Z5 r; I ](欢迎访问老王论坛:laowang.vip)
|