马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):
& n2 E, E( e8 ^: V& D7 z' L4 D$ J! Y i5 T/ h( q( i9 ?(欢迎访问老王论坛:laowang.vip)
3 F) ?- `& U- J$ O; N' 修改文件后缀名.vbs
& l9 o+ m, P ?'
. Q( ~; C q. ]0 ?' 功能说明:
0 X% R6 {6 X. m% M' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。
+ @8 l% }' F. f2 x, z) Q& e' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。
7 n/ g* z6 {- n3 n6 j+ v'$ ?! s# l _7 y) [# Y(欢迎访问老王论坛:laowang.vip)
' 使用说明:
3 g& w7 k# N6 t' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。 F5 |& g- C0 ?$ B% J* J( ]1 [(欢迎访问老王论坛:laowang.vip)
' 2. 双击运行脚本或通过命令行运行。0 s( e: j4 F# D- ]' o. n(欢迎访问老王论坛:laowang.vip)
' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。! a4 m' Z3 F; a' n1 ? q(欢迎访问老王论坛:laowang.vip)
' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。 }( ], X8 \2 w `6 H: x+ v(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。
9 R9 D, A/ q/ |8 y7 i) _8 Z' 6. 完成后,脚本会弹出消息框提示操作已成功完成。
: \3 R) x' g3 C
& N. v: Y0 R5 J; T9 t o- W" `Option Explicit
" l; e; `0 I X5 ^. f; {# F+ Y+ B, p8 P8 @(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的路径
7 z4 V! d# E4 ~% q; mDim folderPath
1 S! _) W! N% e' OfolderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")
: a% i( C) F5 l" e' q/ u4 P" u" V9 a(欢迎访问老王论坛:laowang.vip)
' 获取用户输入的新文件后缀名(不包含点)
8 y% V8 Z( J8 n8 [' @5 x* GDim newExtension& o2 i) p( T1 T+ `$ n8 l, g4 Z; T(欢迎访问老王论坛:laowang.vip)
newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")
5 a# j& _6 w0 I
% X! I' e. G: O; P+ j0 I! w6 d' 如果用户取消了输入框,则退出脚本4 M1 R- @) d/ G(欢迎访问老王论坛:laowang.vip)
If newExtension = "" Then& _9 [# y0 `( X* [8 ~8 v(欢迎访问老王论坛:laowang.vip)
MsgBox "操作已取消。", vbInformation, "信息"$ O0 |( M% j6 R0 c) W' {(欢迎访问老王论坛:laowang.vip)
WScript.Quit
/ |6 Q) ?, S1 K# h" @; a6 IEnd If
: ^. F( f* U2 o4 ^ A7 M3 t0 N1 n+ T) b, K+ V3 `* k! L8 H(欢迎访问老王论坛:laowang.vip)
' 确保新的后缀名不包含点(.)7 I( G) ^, J$ r% `(欢迎访问老王论坛:laowang.vip)
If InStr(newExtension, ".") > 0 Then0 g; j, g" F3 S1 X& S(欢迎访问老王论坛:laowang.vip)
MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"
4 T' D$ U5 x+ |" X) u7 p WScript.Quit
0 z& P8 n' A$ \End If' Z- j3 m. J8 m3 A(欢迎访问老王论坛:laowang.vip)
# `$ R' F' u; { B3 }3 h% t(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象5 J% H1 W) b% R" X(欢迎访问老王论坛:laowang.vip)
Dim fso, folder, subFolder. A& P& O9 |! F9 t, P(欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject")( |% e, u8 R# l- x7 \2 M: B: q8 R(欢迎访问老王论坛:laowang.vip)
9 I3 A7 }) J5 \' 获取当前目录的 Folder 对象) U& b3 P2 D! f' n(欢迎访问老王论坛:laowang.vip)
Set folder = fso.GetFolder(folderPath)7 \ x2 T* @4 G% b: Z7 j+ y" `(欢迎访问老王论坛:laowang.vip)
r( J( H& O( t# ]( _(欢迎访问老王论坛:laowang.vip)
' 检查当前目录是否包含子目录. C7 \2 S$ f E$ T0 _3 l: r(欢迎访问老王论坛:laowang.vip)
Dim hasSubFolders
% O5 C. P- s! E; G" W# O% fhasSubFolders = folder.SubFolders.Count > 0' b# @* h: C3 ^(欢迎访问老王论坛:laowang.vip)
- q+ L& h; G' }' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件
) b# c' ?' |3 g K$ T) ~/ rDim modifySubFolders9 W2 T+ n0 |6 m! O& |. W(欢迎访问老王论坛:laowang.vip)
If hasSubFolders Then
2 d' B, D3 Y: V, ^) e! A9 b' T/ N modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")& h4 U! V5 |0 A0 I2 X6 G3 K(欢迎访问老王论坛:laowang.vip)
End If
5 Q- r7 }/ n7 U/ V3 M- Q# p, |4 \7 y3 m# \3 Y(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件" U& @) X; }+ e6 _$ Y(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension); g! c& H4 g& v6 a: m2 D0 o& K4 L(欢迎访问老王论坛:laowang.vip)
$ E- Z; P& U1 e9 y' [4 E(欢迎访问老王论坛:laowang.vip)
' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件
0 b) C- |' D0 kIf hasSubFolders And modifySubFolders = vbYes Then
?1 s+ R$ { R$ r7 s For Each subFolder In folder.SubFolders
; |! O" E; F: R Call ProcessFiles(subFolder, newExtension)3 `9 M3 X8 N( h& F: n% R3 r(欢迎访问老王论坛:laowang.vip)
Next
# l9 a" ~* H& ZEnd If
2 p2 E; [/ x, i/ R/ x: q
9 |9 n8 U! ^" G7 y6 `) A& g. ~' 提示用户操作完成
! O6 f j2 O$ T& a; h$ [2 IMsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"1 i/ D! k$ ~+ u0 `+ s V1 @(欢迎访问老王论坛:laowang.vip)
9 |% J9 L3 E; ~' 处理指定目录中的文件的子程序! q6 W+ P5 V3 G(欢迎访问老王论坛:laowang.vip)
Sub ProcessFiles(targetFolder, newExtension)+ O' r9 f1 D }" S$ O) [(欢迎访问老王论坛:laowang.vip)
Dim file, oldName, baseName, currentExtension, newName, newFileName, counter
. f# d8 n A9 C/ A' \2 @ Dim nameDict
, ^2 w% p, s! V! G9 V8 d
1 {; H7 q( O+ S+ I* ?$ M% N ' 创建一个字典对象,用于存储当前目录内的文件名4 a3 `8 i {; y$ O/ O9 e$ d! d(欢迎访问老王论坛:laowang.vip)
Set nameDict = CreateObject("Scripting.Dictionary")
) \. t2 b: k' |; A$ t' W% ~& D' V; O/ l4 v4 g U(欢迎访问老王论坛:laowang.vip)
' 遍历指定目录下的所有文件1 Q7 d" _! Z3 [: V(欢迎访问老王论坛:laowang.vip)
For Each file In targetFolder.Files9 C6 }- m9 J; _ P% M7 ^% H# }% S(欢迎访问老王论坛:laowang.vip)
' 跳过后缀名为 .vbs 的文件
0 X$ {2 n0 \3 c) J$ Z If LCase(fso.GetExtensionName(file)) <> "vbs" Then1 P) }9 u9 e# f; v(欢迎访问老王论坛:laowang.vip)
' 获取文件的旧名称、基础名称和当前后缀名
% ~$ `2 w; n6 L0 E0 @& a- x oldName = file.Name
. d9 E: G5 N7 I! T. Y8 t baseName = fso.GetBaseName(file)
* `7 Z3 k. _6 B. n8 B6 V+ ` currentExtension = LCase(fso.GetExtensionName(file))
- E, \5 h1 D8 z* P( ]
8 p) U0 [- ?' S9 ~ ' 如果当前后缀名与新后缀名不同,则进行重命名6 n9 j l# V) H; M(欢迎访问老王论坛:laowang.vip)
If currentExtension <> LCase(newExtension) Then
1 G4 C1 @* l; R6 n6 D ' 创建新的文件名! w5 J5 y8 E) I0 ]( F9 L(欢迎访问老王论坛:laowang.vip)
newName = baseName & "." & newExtension* x" k2 E) c5 ?+ W: c& g(欢迎访问老王论坛:laowang.vip)
8 F$ C7 [1 e9 B+ n: O' F ' 检查是否已有同名文件,如果有,则处理重名( U" h B: a1 A" k" H( h8 [; L(欢迎访问老王论坛:laowang.vip)
newFileName = newName
& N# b1 e7 F' c" |6 f' \ counter = 1$ V, K- R: Y: G* Y* }(欢迎访问老王论坛:laowang.vip)
' 确保新的文件名唯一2 G8 `7 n# b, f$ v3 t(欢迎访问老王论坛:laowang.vip)
While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)
0 d8 p' V: k5 S+ E/ w D newFileName = baseName & "(" & counter & ")." & newExtension
6 n* f* o& W2 G4 f8 S* o% h counter = counter + 1# `# D" L& j- D: u) u(欢迎访问老王论坛:laowang.vip)
Wend
1 ~, l4 |, T \( r( a" B! m5 |" @7 G( c& i( a(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名
; v9 t& N r* P nameDict.Add newFileName, True5 L9 W/ y) u9 @! r(欢迎访问老王论坛:laowang.vip)
# t" x7 Q* J b$ j ' 重命名文件
; q% K! k/ C) y9 b7 p$ x; l' ` file.Name = newFileName# s# n c( u: {- w(欢迎访问老王论坛:laowang.vip)
End If' U, {& W) m5 H1 D(欢迎访问老王论坛:laowang.vip)
End If
6 i, }( k1 c$ c Next
* {% N4 g) N$ c! lEnd Sub
+ P9 F% M3 O( t+ V! f: i5 D3 @8 Z- }2 f0 A/ J0 _(欢迎访问老王论坛:laowang.vip)
& ~- Z8 F% V1 R# G(欢迎访问老王论坛:laowang.vip)
3 S: Q+ S5 Y8 R' A4 f |