马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):
9 c, {+ ~% a+ J; d6 R9 L0 ^
: ^8 M* ^) C2 j- X9 J* y1 |2 B$ {6 K& s# }$ L(欢迎访问老王论坛:laowang.vip)
' 修改文件后缀名.vbs
# {2 ^) x3 b1 c% A' _ l/ R1 f/ i'; k$ r# _$ u, {* X* b+ \6 d(欢迎访问老王论坛:laowang.vip)
' 功能说明:
& w( a, J: z% N% @6 G! j5 m9 {7 h: Q7 ?' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。
2 T0 d$ Z8 V+ _2 N' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。& ^/ p1 m; Z5 Z4 `(欢迎访问老王论坛:laowang.vip)
'
+ E& A' {" C+ l/ ]8 g, E' 使用说明:
# F/ e' V+ }" @& Y" ]' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。
# V8 n3 F' ]& ]4 [! `2 L, R' 2. 双击运行脚本或通过命令行运行。. u4 v& M2 _- B$ B! U) O# }& Q(欢迎访问老王论坛:laowang.vip)
' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。% x! E3 a5 V% @7 e* s3 w; i(欢迎访问老王论坛:laowang.vip)
' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。, ~1 e+ ~ x) Y! m(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。
4 F9 ^2 y4 b: Z6 v0 U! O% E' 6. 完成后,脚本会弹出消息框提示操作已成功完成。
0 V$ _1 t# v5 p1 q0 K+ q) ~/ e( G5 q# r" b8 q(欢迎访问老王论坛:laowang.vip)
Option Explicit: `0 O9 m, X4 _) r(欢迎访问老王论坛:laowang.vip)
. I$ E, H* r/ g# Y! Y(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的路径* Q9 x, X) v9 F7 g( G) U(欢迎访问老王论坛:laowang.vip)
Dim folderPath# Z! ]" U5 E- N(欢迎访问老王论坛:laowang.vip)
folderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")8 z) j4 K k# ?1 e% U3 n(欢迎访问老王论坛:laowang.vip)
& j8 ~. o6 c- O& A/ c4 x(欢迎访问老王论坛:laowang.vip)
' 获取用户输入的新文件后缀名(不包含点)
9 ^% x x4 o3 UDim newExtension, ]2 Y. Z4 g% I5 a5 d4 W/ J(欢迎访问老王论坛:laowang.vip)
newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")! N& H( H% B4 I6 t- i" {6 F. \(欢迎访问老王论坛:laowang.vip)
$ `: ^8 o# y+ @+ a(欢迎访问老王论坛:laowang.vip)
' 如果用户取消了输入框,则退出脚本8 B4 o: v/ o' a! r, m1 @(欢迎访问老王论坛:laowang.vip)
If newExtension = "" Then# x+ e! m5 I9 c: d, z3 u- Z7 U9 |(欢迎访问老王论坛:laowang.vip)
MsgBox "操作已取消。", vbInformation, "信息"
- b8 P# _# `8 M7 @ WScript.Quit
$ f v% L- o. {9 K5 z4 IEnd If- L, \0 J5 p$ k* n, {(欢迎访问老王论坛:laowang.vip)
/ ]& D8 B" b4 Z, x c! E(欢迎访问老王论坛:laowang.vip)
' 确保新的后缀名不包含点(.)( `4 [/ [% K8 H3 [ ?(欢迎访问老王论坛:laowang.vip)
If InStr(newExtension, ".") > 0 Then
- s' J1 Q; d7 g5 N, }7 o! `. ]) _ MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"7 |' M1 ] D+ L- ^: I& [' a! \- ?) s(欢迎访问老王论坛:laowang.vip)
WScript.Quit. `1 }# g3 U7 \4 [& y0 W(欢迎访问老王论坛:laowang.vip)
End If2 n/ { K! V, u) b9 a(欢迎访问老王论坛:laowang.vip)
1 N, v$ I3 |; T. G- m* C. m* ?' L(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象
; K) R E7 y2 V% G6 ^. B! bDim fso, folder, subFolder
6 u$ I( n( s1 i# G, ?; iSet fso = CreateObject("Scripting.FileSystemObject")
4 ], c! T$ n& h4 Y, K, Q6 w7 A1 ]
* X) O6 e2 B; N! a% s8 W' 获取当前目录的 Folder 对象4 }2 R+ F* W% i(欢迎访问老王论坛:laowang.vip)
Set folder = fso.GetFolder(folderPath)8 ]! q$ q6 j8 a& \& \(欢迎访问老王论坛:laowang.vip)
$ \# ?2 p) Y/ p' l+ k8 _(欢迎访问老王论坛:laowang.vip)
' 检查当前目录是否包含子目录) F# t" d) k* W2 W. k(欢迎访问老王论坛:laowang.vip)
Dim hasSubFolders
; k7 v. H4 B8 s, N. |hasSubFolders = folder.SubFolders.Count > 0
4 l1 }7 D* |* }4 \5 i& a8 v4 E; ~5 I" y7 f) u9 t(欢迎访问老王论坛:laowang.vip)
' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件- r5 a8 g# q P6 O2 ^* m(欢迎访问老王论坛:laowang.vip)
Dim modifySubFolders2 O) n% Y$ g4 O+ M(欢迎访问老王论坛:laowang.vip)
If hasSubFolders Then
0 J* J* T6 \+ R. d, w5 ^0 v$ ] modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")0 N Z0 W- b5 b2 b, ?& `# G; x(欢迎访问老王论坛:laowang.vip)
End If
& U9 Q4 X8 ?: T! X$ A1 o% x6 b/ {(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件
3 E* C% D2 ?+ e0 MCall ProcessFiles(folder, newExtension); |$ [" i6 F9 [+ a4 j/ V(欢迎访问老王论坛:laowang.vip)
0 ?% @4 y. S5 o! @; s$ u' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件( f: L* m( f% A& @, G6 f. s) e(欢迎访问老王论坛:laowang.vip)
If hasSubFolders And modifySubFolders = vbYes Then
4 s G! f8 f; R0 `& M+ O' H. H4 V For Each subFolder In folder.SubFolders
: B- }- k Q$ S3 w: n Call ProcessFiles(subFolder, newExtension)
, z( u) w5 h1 w+ P; d Next$ Y# e2 x( I; x c0 r+ S" N(欢迎访问老王论坛:laowang.vip)
End If* R4 s; ~* w7 Z# P2 K(欢迎访问老王论坛:laowang.vip)
1 F7 k& D4 L/ J9 H* B' 提示用户操作完成
. T$ P0 U4 N+ Q: iMsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"9 e+ M' H% ] z* A0 _0 F6 y9 F7 w(欢迎访问老王论坛:laowang.vip)
- [# {. C. s/ n2 a* ]/ e. o(欢迎访问老王论坛:laowang.vip)
' 处理指定目录中的文件的子程序9 C5 E7 G# @8 Y/ u2 ~: c$ c(欢迎访问老王论坛:laowang.vip)
Sub ProcessFiles(targetFolder, newExtension): l6 X; J1 t0 k(欢迎访问老王论坛:laowang.vip)
Dim file, oldName, baseName, currentExtension, newName, newFileName, counter9 R! c+ b9 h9 ?9 n7 R6 d9 v(欢迎访问老王论坛:laowang.vip)
Dim nameDict
# v9 y4 _8 S9 S f2 c2 i3 X
! y4 o+ T2 H7 a2 q7 v ' 创建一个字典对象,用于存储当前目录内的文件名
% V6 `! u1 [& z- C+ t Set nameDict = CreateObject("Scripting.Dictionary")- N; z5 X. ]6 M% g, Y0 V(欢迎访问老王论坛:laowang.vip)
5 D, y1 e1 G- Q3 R ' 遍历指定目录下的所有文件
( _2 J- P# a8 N! n6 ~ For Each file In targetFolder.Files0 z- o' B6 ] K4 Q/ \(欢迎访问老王论坛:laowang.vip)
' 跳过后缀名为 .vbs 的文件 q/ Z% R' [3 r8 b& i( v; N(欢迎访问老王论坛:laowang.vip)
If LCase(fso.GetExtensionName(file)) <> "vbs" Then
. e6 v+ R" _! j ' 获取文件的旧名称、基础名称和当前后缀名
5 I& c4 v$ p2 Y) o& ~! O6 k oldName = file.Name
; s; D! `* R; d; Z5 D baseName = fso.GetBaseName(file)
9 N9 l1 y5 u4 ?) n; G4 v" b! h1 g( V, U6 C currentExtension = LCase(fso.GetExtensionName(file))( O" t1 O4 i% H) C% u. B(欢迎访问老王论坛:laowang.vip)
" b2 t1 p, o. h) C! M ' 如果当前后缀名与新后缀名不同,则进行重命名. q4 n; M+ H/ H/ V. S A d(欢迎访问老王论坛:laowang.vip)
If currentExtension <> LCase(newExtension) Then
5 O0 K' d# E9 a$ K- G ' 创建新的文件名
; @9 P7 q/ E, f* Q newName = baseName & "." & newExtension
$ ^) d3 z. }1 ]3 G' \+ `3 c* B7 o: w( |$ F I3 M(欢迎访问老王论坛:laowang.vip)
' 检查是否已有同名文件,如果有,则处理重名# R9 F: P9 _8 P% _8 |2 M(欢迎访问老王论坛:laowang.vip)
newFileName = newName
5 _- Y' `8 [' K* D2 m counter = 18 w5 ^. _' A* l. v(欢迎访问老王论坛:laowang.vip)
' 确保新的文件名唯一
, ~& _% C! }& n- U6 W: ` While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)! U1 C0 m6 x6 e' a9 e7 F1 f; b(欢迎访问老王论坛:laowang.vip)
newFileName = baseName & "(" & counter & ")." & newExtension
7 `3 I0 F7 _3 \& I" X counter = counter + 1
/ E3 W% C h0 u9 z4 o Wend- T) M, h v3 R/ F(欢迎访问老王论坛:laowang.vip)
) T) K$ z3 c" ~4 L(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名4 I9 D/ R; J8 z: w! h7 E(欢迎访问老王论坛:laowang.vip)
nameDict.Add newFileName, True
. U6 ]" ]( d- F$ x1 e/ \
" w- f3 y6 s" Y- g" A( y) N$ J ' 重命名文件
) e+ o$ E, L+ G; O file.Name = newFileName# U$ u* S2 B7 W' a! B; f(欢迎访问老王论坛:laowang.vip)
End If- P8 `0 P' f/ h& |3 }) y3 V(欢迎访问老王论坛:laowang.vip)
End If
8 [ C e- D9 b$ d Next
' Q. r" d7 J- X" `End Sub$ t; E1 O9 r$ J" P% w9 H(欢迎访问老王论坛:laowang.vip)
y' y0 a+ X% ]7 S(欢迎访问老王论坛:laowang.vip)
- C! L7 B$ I, n. _& f1 w9 f6 Z+ M* W# n. Q3 w/ ~& {(欢迎访问老王论坛:laowang.vip)
|