马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):
0 L j+ v( O o& H: M& s; X* m6 v6 D1 `0 p2 v(欢迎访问老王论坛:laowang.vip)
# N+ p. {" F0 w1 X- I/ Z' 修改文件后缀名.vbs$ f1 O$ {' K P0 W; I4 ]3 n(欢迎访问老王论坛:laowang.vip)
'! H1 a L# G! |* T(欢迎访问老王论坛:laowang.vip)
' 功能说明:8 _( d3 J' M( z1 R(欢迎访问老王论坛:laowang.vip)
' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。 / m9 r. h8 C' B6 S, X(欢迎访问老王论坛:laowang.vip)
' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。7 t) R1 z* I7 Y; F(欢迎访问老王论坛:laowang.vip)
'
0 I" X2 ? ?, E0 B' 使用说明:
i9 C; I$ N; h8 j0 k' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。
( r/ ^3 f( O) D, J: q) Q' 2. 双击运行脚本或通过命令行运行。
1 z {/ Z+ Q6 M* B% x$ Z' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。
9 U# x5 D: M p4 {' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。9 t7 Y$ m8 p3 Y: r& u4 y(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。
5 U8 r2 `2 M0 a& @' 6. 完成后,脚本会弹出消息框提示操作已成功完成。# d( u5 j+ h4 Z# p/ r9 t' i(欢迎访问老王论坛:laowang.vip)
0 C# v" H$ S3 F- I7 G# b+ F(欢迎访问老王论坛:laowang.vip)
Option Explicit
' Y7 u- L) |; X9 T: T) y: x
& V9 `" \8 }+ K' ^, a7 s# r# J' 获取当前目录的路径
$ j6 h+ h: v& @' h* rDim folderPath
" a1 Q; l3 r$ a" x: R( \. A+ I3 o/ ?folderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")
0 {# O+ x4 Z" k9 x/ `
8 g, i3 a3 h% W3 ~' 获取用户输入的新文件后缀名(不包含点)
, \- x! [/ G4 s8 ]2 iDim newExtension
% ]8 Y! ]4 d7 e# ?) ~7 P/ |newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")
1 R, Q& @3 G; P1 ]6 i
0 g' u8 K* r3 Y, `: o. t' 如果用户取消了输入框,则退出脚本" x! T, T+ a ?; P6 [(欢迎访问老王论坛:laowang.vip)
If newExtension = "" Then# |& U' H5 |2 n+ a(欢迎访问老王论坛:laowang.vip)
MsgBox "操作已取消。", vbInformation, "信息"8 l I7 ~! }- K! g(欢迎访问老王论坛:laowang.vip)
WScript.Quit# G. a3 ]5 k3 P" h(欢迎访问老王论坛:laowang.vip)
End If
" ?, K2 k% }3 }0 r6 F1 c/ h! z3 ?1 Z+ }) U M# x(欢迎访问老王论坛:laowang.vip)
' 确保新的后缀名不包含点(.)
- T' P& a2 u& {8 r* T$ f) YIf InStr(newExtension, ".") > 0 Then5 i& }, a" g8 G7 T: M% }' ?(欢迎访问老王论坛:laowang.vip)
MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"
. `: V- O& f9 H9 C WScript.Quit" g' z( i% U( i; \: [% L) p2 Q( ~(欢迎访问老王论坛:laowang.vip)
End If& a+ f6 `2 X/ `5 y/ p! V* c(欢迎访问老王论坛:laowang.vip)
* Y! Q3 R0 E7 T; v) }/ g(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象
; V. l9 o# Y3 o' u* v5 i+ w7 mDim fso, folder, subFolder
3 V( W$ Q4 r! Q: |! d8 b+ n! BSet fso = CreateObject("Scripting.FileSystemObject")
6 ]" {* i3 o" U/ `) ~8 n% k5 R(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的 Folder 对象
3 E# }( r1 V5 G$ F) a+ Q9 Y) hSet folder = fso.GetFolder(folderPath)
/ Y# t0 B; B8 h, ?% L/ L6 k6 o: a9 T) P; ?2 k# C1 `5 A(欢迎访问老王论坛:laowang.vip)
' 检查当前目录是否包含子目录
2 H4 X0 Y) J3 A. O3 w) MDim hasSubFolders! p$ j8 F+ k7 U+ g2 B) x/ v(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 0
" v7 }3 c1 g \0 ~" Q
& e* @4 Y, V9 K7 p8 t' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件
9 S+ @+ P) s( E" ?Dim modifySubFolders8 J5 T. h8 S2 C/ a( d! v(欢迎访问老王论坛:laowang.vip)
If hasSubFolders Then5 R6 c. h8 y( O, A: z' X2 O7 |(欢迎访问老王论坛:laowang.vip)
modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
6 M6 H$ @3 h7 Y/ R& TEnd If6 C0 ]8 n L! Q6 \(欢迎访问老王论坛:laowang.vip)
; W) Q' `3 u- h(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件
9 c. M8 \* d ]; G$ x3 J0 Z7 ^Call ProcessFiles(folder, newExtension)* U/ x; F) L; q& P/ j(欢迎访问老王论坛:laowang.vip)
# u: I4 z; a* E4 V' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件
" r0 S' C+ Q' w) u _6 yIf hasSubFolders And modifySubFolders = vbYes Then. a) J1 I, @7 T& I$ E) T. K5 j(欢迎访问老王论坛:laowang.vip)
For Each subFolder In folder.SubFolders
. w* l' t* U, | Call ProcessFiles(subFolder, newExtension)# @% W5 Y) ]/ L(欢迎访问老王论坛:laowang.vip)
Next
) T/ O! T* o% B7 w# R1 YEnd If8 Z$ L2 y. V7 Z' Q(欢迎访问老王论坛:laowang.vip)
# @7 G5 `3 ?6 R! |' 提示用户操作完成
' i0 o$ Y/ ]7 a; V! SMsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"7 E2 x) |* \0 `- H6 x$ ~' C* L C(欢迎访问老王论坛:laowang.vip)
# r& _( h. \& m' 处理指定目录中的文件的子程序' ]& @: r" h9 B; L+ V(欢迎访问老王论坛:laowang.vip)
Sub ProcessFiles(targetFolder, newExtension)
: l) t5 ^) l8 L. \4 W6 m Dim file, oldName, baseName, currentExtension, newName, newFileName, counter
* H. h5 f) Q3 v+ u, a6 t5 A Dim nameDict
a, t' |4 y& Q9 i- d$ m
/ g" e5 E1 s _% t; p( [ ' 创建一个字典对象,用于存储当前目录内的文件名
8 ?/ D% m$ J2 m5 ]! u. l- C8 m Set nameDict = CreateObject("Scripting.Dictionary")
, h# Q/ f/ p3 O# w
$ W( n+ Z3 }" o" t8 ^- n ' 遍历指定目录下的所有文件2 o& a- \/ K9 Z# A( w( k(欢迎访问老王论坛:laowang.vip)
For Each file In targetFolder.Files
$ ~% K8 y3 Z, v7 [1 j- _5 _8 m ' 跳过后缀名为 .vbs 的文件5 l, p( S$ f$ i: a- b' d4 w3 E! I(欢迎访问老王论坛:laowang.vip)
If LCase(fso.GetExtensionName(file)) <> "vbs" Then
2 [/ {# D6 J2 g, Y ' 获取文件的旧名称、基础名称和当前后缀名9 o, i h* f. t2 Y( [5 U(欢迎访问老王论坛:laowang.vip)
oldName = file.Name
( Y1 V1 K' g# ?! h baseName = fso.GetBaseName(file)
- R) D; c' w, E( Q5 s currentExtension = LCase(fso.GetExtensionName(file))$ D, H/ O- Y* T* i6 V(欢迎访问老王论坛:laowang.vip)
& x c% }( o5 I3 ^9 v2 l. S0 ~7 u& b ' 如果当前后缀名与新后缀名不同,则进行重命名
$ c0 }8 [; z( y2 e0 r' Z) P7 }& o If currentExtension <> LCase(newExtension) Then4 H+ ~6 }2 X, h! K8 a(欢迎访问老王论坛:laowang.vip)
' 创建新的文件名- [" q$ v+ T, X' x(欢迎访问老王论坛:laowang.vip)
newName = baseName & "." & newExtension
|3 Z( K6 O! a6 H
/ c7 ~- k4 V/ ~) _3 L ' 检查是否已有同名文件,如果有,则处理重名
) S+ t1 \) N [' | newFileName = newName
$ y l3 r- V/ G counter = 1
8 ?3 t. ^1 s) O6 `& V ' 确保新的文件名唯一. D. q' r3 t4 }; T(欢迎访问老王论坛:laowang.vip)
While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)
3 |, @8 E8 {, F z newFileName = baseName & "(" & counter & ")." & newExtension2 ]1 X+ s/ {, g' D9 L, ]9 h(欢迎访问老王论坛:laowang.vip)
counter = counter + 1
1 [% r) J" g! E0 g7 s Wend8 Z: Y% z. v3 u1 {9 H( \& G(欢迎访问老王论坛:laowang.vip)
9 Q i2 [( U% s* t(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名
/ |5 Y" c! V7 o nameDict.Add newFileName, True
$ I/ y2 O# |! K( `
. J6 Y; J9 i$ e ' 重命名文件8 K+ a, E+ |7 V(欢迎访问老王论坛:laowang.vip)
file.Name = newFileName
p7 {; e9 E/ N8 g End If' z9 L6 ^" G, O" Y f8 g* t: k, l(欢迎访问老王论坛:laowang.vip)
End If
2 P6 F) v" p: k# T Next, C5 C* U- i+ O: a& E& T(欢迎访问老王论坛:laowang.vip)
End Sub
$ }& ^& E7 I" @. @% N' K# D
" ` U x0 v' o" ~, d. i4 T6 C. `) f(欢迎访问老王论坛:laowang.vip)
- P1 b5 q8 Z9 [- A6 S( q$ a |