马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):
% ]9 N- G7 q2 l9 j% z8 n0 \: Z5 a; `(欢迎访问老王论坛:laowang.vip)
0 B, z& N8 }' M7 x( R& x6 l' 修改文件后缀名.vbs3 Z; o1 m' M' U, L c) v6 I# O' a(欢迎访问老王论坛:laowang.vip)
'
; Q }5 H4 I$ Q* W5 P8 G' 功能说明:+ O' Q$ Y6 s7 Y; ?7 c(欢迎访问老王论坛:laowang.vip)
' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。
. Z3 F$ d3 w2 }& b' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。
' g) J# Q" _- c" b( n6 c: e'
( L& U& l b7 g$ r! g' 使用说明:
( V9 T1 W* v9 `' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。/ x. \$ q( d; w7 n(欢迎访问老王论坛:laowang.vip)
' 2. 双击运行脚本或通过命令行运行。0 b% }* ^8 a4 x. Q(欢迎访问老王论坛:laowang.vip)
' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。; X! X, D: }) L! R: c2 l. T( |! H(欢迎访问老王论坛:laowang.vip)
' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。6 W$ |# `( C q' |4 [6 Z+ [9 H! ^) e(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。/ B& Q M+ o0 Z+ T# M# {& Z(欢迎访问老王论坛:laowang.vip)
' 6. 完成后,脚本会弹出消息框提示操作已成功完成。& q' x1 H' b/ A+ F% [(欢迎访问老王论坛:laowang.vip)
! C7 {% l$ U; y$ rOption Explicit% c! M, o" y1 r, F$ f' k0 v(欢迎访问老王论坛:laowang.vip)
3 C+ E1 H2 i* b3 U4 s* |: _1 e U' 获取当前目录的路径
: a; j% Q# j7 GDim folderPath5 t7 n( m5 Y( F0 x: q(欢迎访问老王论坛:laowang.vip)
folderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")- S5 M. u7 Y+ }2 [4 d/ L9 S. |" U(欢迎访问老王论坛:laowang.vip)
! ~) u7 {8 @8 f- \6 p' 获取用户输入的新文件后缀名(不包含点)) ?9 G2 v. l* }8 A u(欢迎访问老王论坛:laowang.vip)
Dim newExtension' y2 f1 ]0 C$ g% e3 H5 V(欢迎访问老王论坛:laowang.vip)
newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")
p* r7 {0 \/ R+ x0 C' M T9 ? S( L( S7 N0 {(欢迎访问老王论坛:laowang.vip)
' 如果用户取消了输入框,则退出脚本
! t" W; `" {! {1 FIf newExtension = "" Then
0 Z' T2 s* K9 F/ ]9 { MsgBox "操作已取消。", vbInformation, "信息"
2 |2 D& j( @+ v' p: Y2 e* G WScript.Quit
- R5 b8 v2 t( N3 M& F4 { U# s9 TEnd If
% t) W% w; L4 ~, M9 a' Z3 q
4 j6 y: {- t" r' 确保新的后缀名不包含点(.)% d8 d2 s' w, _ L3 b2 c' ^' k- s6 }6 r(欢迎访问老王论坛:laowang.vip)
If InStr(newExtension, ".") > 0 Then
# n B6 ^& p) p7 O" W: x MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"+ Q. \1 u; b* Q$ }(欢迎访问老王论坛:laowang.vip)
WScript.Quit) Y6 I" Y7 d; T' x(欢迎访问老王论坛:laowang.vip)
End If1 S& l' e: B- @0 X. I; [(欢迎访问老王论坛:laowang.vip)
! o) Q, ^. n+ ~( V! [8 n1 [1 L(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象* \" t9 e" I }, R) P; C(欢迎访问老王论坛:laowang.vip)
Dim fso, folder, subFolder4 S9 r$ a' O/ C% z* \( V# O/ ](欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject"), P: k% x& b0 N8 g3 N4 f) `3 M* z/ z(欢迎访问老王论坛:laowang.vip)
, w3 X0 P. \& m' 获取当前目录的 Folder 对象
" z( d% r& J) `) oSet folder = fso.GetFolder(folderPath)- i( ?! c" O; i1 |/ T" Q(欢迎访问老王论坛:laowang.vip)
; k2 s& }7 ]% W6 t6 G w(欢迎访问老王论坛:laowang.vip)
' 检查当前目录是否包含子目录! q9 A$ Q$ {1 Y. U v7 ?$ `(欢迎访问老王论坛:laowang.vip)
Dim hasSubFolders
7 M. W7 C, _; ]0 f8 W' e0 V6 hhasSubFolders = folder.SubFolders.Count > 0
9 g& n0 f2 a! C7 g' W
4 C h) m; Q; T; C' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件
* @- M$ O5 H' }Dim modifySubFolders
: E& k0 j4 ]3 }; Y' S; M' PIf hasSubFolders Then
+ o _7 b( z# i/ v6 L5 s2 E7 u modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")" _7 l$ k3 g+ h5 x4 l6 T. G: s4 K [(欢迎访问老王论坛:laowang.vip)
End If" n, H2 D& S8 }5 l) |. c G) `(欢迎访问老王论坛:laowang.vip)
$ A/ |2 U+ n5 h/ `0 ~2 ^0 E' 处理当前目录中的所有文件
' \6 z2 a3 l5 ]0 E% YCall ProcessFiles(folder, newExtension): ?1 |$ ~6 A0 H8 f(欢迎访问老王论坛:laowang.vip)
7 c4 A, W) r5 f3 r- J4 a(欢迎访问老王论坛:laowang.vip)
' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件' [8 y3 A$ k" X2 H5 Y(欢迎访问老王论坛:laowang.vip)
If hasSubFolders And modifySubFolders = vbYes Then% ~; ?- P$ T1 s- T(欢迎访问老王论坛:laowang.vip)
For Each subFolder In folder.SubFolders
# h S. ]+ S) g9 `4 }# f: ` Call ProcessFiles(subFolder, newExtension)
4 X- Y$ W- F, T9 `' C Next
) g0 [8 m- [ k5 I1 S5 R" aEnd If
J4 o. z* Y: k& Z* b3 R
5 H1 j: i; J$ j' 提示用户操作完成
% g+ j9 E- x& A; B4 P0 NMsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"
1 o1 ]# B1 M) R# R1 U6 S9 P/ S
+ b5 E7 }4 d, j! b' 处理指定目录中的文件的子程序3 }6 r2 [ x1 J(欢迎访问老王论坛:laowang.vip)
Sub ProcessFiles(targetFolder, newExtension)0 s8 G. I3 P" q) \(欢迎访问老王论坛:laowang.vip)
Dim file, oldName, baseName, currentExtension, newName, newFileName, counter
. g) m1 w4 s/ K/ n# o' e! M Dim nameDict( {8 ? ^. C% C4 q/ p(欢迎访问老王论坛:laowang.vip)
, m X) [1 u- k' W2 g(欢迎访问老王论坛:laowang.vip)
' 创建一个字典对象,用于存储当前目录内的文件名5 N8 S# R" C A8 X G, D0 J(欢迎访问老王论坛:laowang.vip)
Set nameDict = CreateObject("Scripting.Dictionary")
2 M) s: I* I* S9 ]/ i1 _
: U3 V+ c$ `3 E! ^ Z- G5 g; W ' 遍历指定目录下的所有文件0 M: s: f5 h$ f3 P7 ?9 f(欢迎访问老王论坛:laowang.vip)
For Each file In targetFolder.Files
. K" C# u5 J" R/ h9 V0 O6 o( l$ ` ' 跳过后缀名为 .vbs 的文件: k: c" J% J7 c8 f. S: ]4 r(欢迎访问老王论坛:laowang.vip)
If LCase(fso.GetExtensionName(file)) <> "vbs" Then. U* R0 P3 v* L* [1 Q(欢迎访问老王论坛:laowang.vip)
' 获取文件的旧名称、基础名称和当前后缀名9 A9 H6 j7 o6 [) ]7 w) I(欢迎访问老王论坛:laowang.vip)
oldName = file.Name! k, z( m# B a! `(欢迎访问老王论坛:laowang.vip)
baseName = fso.GetBaseName(file)
1 |4 S' p& g9 n) x3 C+ t- a currentExtension = LCase(fso.GetExtensionName(file))
# ~" v6 ~7 v% R! \# r c% y- {' T% c- H! ~! H' w( Z. N(欢迎访问老王论坛:laowang.vip)
' 如果当前后缀名与新后缀名不同,则进行重命名
8 t |* B" x9 b If currentExtension <> LCase(newExtension) Then% [: v0 s8 H2 |" E0 }% |(欢迎访问老王论坛:laowang.vip)
' 创建新的文件名
* a% f0 o2 f' C) o newName = baseName & "." & newExtension$ C" \* K4 q0 r(欢迎访问老王论坛:laowang.vip)
- T4 D% X9 N' k% ]& W K) n(欢迎访问老王论坛:laowang.vip)
' 检查是否已有同名文件,如果有,则处理重名& o& J( e( }: l(欢迎访问老王论坛:laowang.vip)
newFileName = newName2 k% e) n- J8 G, ~# y% O# S(欢迎访问老王论坛:laowang.vip)
counter = 1
# `- U# w [ R- A% I. n ' 确保新的文件名唯一
3 |% r5 b, o$ P While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)
# ]" g3 S8 W4 }# m newFileName = baseName & "(" & counter & ")." & newExtension S& q* Y3 l+ j: m, \* ]3 _(欢迎访问老王论坛:laowang.vip)
counter = counter + 1" u9 F0 A7 i' u(欢迎访问老王论坛:laowang.vip)
Wend
/ l }0 B# F! ~, V# A, @8 ~& G, z" q& u; z, V4 J7 j(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名- @9 |$ S7 N% w' U(欢迎访问老王论坛:laowang.vip)
nameDict.Add newFileName, True
/ q/ ~& Y0 O+ S) ~/ t1 ]8 p& {( e( Y1 f1 q+ \0 d g* h(欢迎访问老王论坛:laowang.vip)
' 重命名文件
3 g0 E0 t& r' ~. C6 W file.Name = newFileName7 c( _) R5 V x(欢迎访问老王论坛:laowang.vip)
End If& Q0 i, l1 w4 C7 C2 v2 N(欢迎访问老王论坛:laowang.vip)
End If
1 w, A& s z g Next
: c7 {% |4 ?, A" `# \& f L5 K, {End Sub8 O1 @& ]9 t. v5 Q1 g) w5 z(欢迎访问老王论坛:laowang.vip)
5 F2 w: `3 ^3 E# P) J* r$ U: Q# K(欢迎访问老王论坛:laowang.vip)
# Y/ r6 y. d6 w. b$ v9 v! N(欢迎访问老王论坛:laowang.vip)
* S3 q; _9 O; y& }6 h m(欢迎访问老王论坛:laowang.vip)
|