马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):+ d( f4 C4 ^ ?) n% a(欢迎访问老王论坛:laowang.vip)
$ b# P1 k4 e2 E$ b! B# m
/ a1 ~$ g, ^5 L; E. \) l' 修改文件后缀名.vbs- Z- @2 a% e" X" Y$ ]! ^(欢迎访问老王论坛:laowang.vip)
'
& `: Q3 W3 x8 c2 a: U$ Z6 E; l: o# D2 W' 功能说明:$ _! N+ }+ U9 l1 A+ {(欢迎访问老王论坛:laowang.vip)
' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。 7 Q: P( o- i) \1 G7 a(欢迎访问老王论坛:laowang.vip)
' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。
; w; D9 N( J# v'
& [- D5 V4 G: @' 使用说明:
( A( v2 K. k1 Y3 G! }' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。
% p' d$ \' e9 e" }5 n* X$ Q# T5 C0 j' 2. 双击运行脚本或通过命令行运行。( j+ h# w. N7 ?% j# z" F0 Q: X(欢迎访问老王论坛:laowang.vip)
' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。/ P. ]1 o% A" X(欢迎访问老王论坛:laowang.vip)
' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。
1 c! e# T, _& J& F; @/ }- U' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。$ `) k8 A2 s0 W. \5 {% A3 u(欢迎访问老王论坛:laowang.vip)
' 6. 完成后,脚本会弹出消息框提示操作已成功完成。
: e% T2 I; |( X9 z( ^/ g% U* r! z4 E3 _% O+ L- w6 s6 c; J" p(欢迎访问老王论坛:laowang.vip)
Option Explicit% `. n/ ~0 H1 r2 V& A; K1 t(欢迎访问老王论坛:laowang.vip)
: L& _5 C1 G' }& `(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的路径
& C' O' f, t& E0 k6 V3 q; XDim folderPath2 v8 w' c* u0 n(欢迎访问老王论坛:laowang.vip)
folderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")% g7 A5 v. ^7 \) I7 f$ W(欢迎访问老王论坛:laowang.vip)
4 C6 L- D. I: z, L, R$ A$ m9 l(欢迎访问老王论坛:laowang.vip)
' 获取用户输入的新文件后缀名(不包含点)4 f/ A6 R; i6 N/ O1 c(欢迎访问老王论坛:laowang.vip)
Dim newExtension2 J- T3 k6 {: N% \5 ` R" Y(欢迎访问老王论坛:laowang.vip)
newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名"); j+ |& o! [; E; P; v( s" i(欢迎访问老王论坛:laowang.vip)
( K7 [ T* W0 T1 n; ~: }; S(欢迎访问老王论坛:laowang.vip)
' 如果用户取消了输入框,则退出脚本
0 V3 f0 q# d1 p0 T& L2 m8 ^1 GIf newExtension = "" Then0 z0 e# I; F# d H! u v3 @(欢迎访问老王论坛:laowang.vip)
MsgBox "操作已取消。", vbInformation, "信息"8 ~7 m2 C# }' {% w& Y. {# @(欢迎访问老王论坛:laowang.vip)
WScript.Quit$ N: K* Q y& h; A M(欢迎访问老王论坛:laowang.vip)
End If
- ^' ]& ]5 J. x6 I
4 M0 F3 w. X2 T% A4 ~' 确保新的后缀名不包含点(.)
' v& {- d1 S2 I9 B. {; c# AIf InStr(newExtension, ".") > 0 Then
) J4 c$ B- U n MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"
) t, Q0 s6 v/ K# ?. ^5 L7 q* E WScript.Quit% C) u' M+ l4 u(欢迎访问老王论坛:laowang.vip)
End If8 I" N0 M: k' P5 Q- w" V/ M/ {(欢迎访问老王论坛:laowang.vip)
( M4 Y) o! [7 }! ~: ^" B- R. z D+ p- i(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象" |+ f5 q3 O+ f; Z' c(欢迎访问老王论坛:laowang.vip)
Dim fso, folder, subFolder
! W# ?& H1 G6 P3 X5 w& P; u3 o; k! aSet fso = CreateObject("Scripting.FileSystemObject"). ^+ U' @7 P- m0 H F* X(欢迎访问老王论坛:laowang.vip)
+ s" I9 z, t! c5 j$ H$ E' 获取当前目录的 Folder 对象/ ^; h) E5 n% V* {& Y+ e/ L(欢迎访问老王论坛:laowang.vip)
Set folder = fso.GetFolder(folderPath): g% p/ F2 S' u% k- n(欢迎访问老王论坛:laowang.vip)
0 K0 u! a4 M$ b7 r& ^0 n' 检查当前目录是否包含子目录0 T4 B4 ^ i) E I(欢迎访问老王论坛:laowang.vip)
Dim hasSubFolders
! E; \7 x |# u$ n% WhasSubFolders = folder.SubFolders.Count > 0
" ?! ^* |# s1 [4 j3 a0 C: }) k+ d! ]$ v* ?(欢迎访问老王论坛:laowang.vip)
' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件
) k7 ^2 d5 s0 B' R5 BDim modifySubFolders
3 ]8 D) P2 ?6 J: @( a0 O0 PIf hasSubFolders Then
3 R" Z: h; N+ Z5 p; x modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")% Q: ^" L. N% H+ e( I. p(欢迎访问老王论坛:laowang.vip)
End If9 z) M P7 H# f/ z* \(欢迎访问老王论坛:laowang.vip)
7 F ^: e1 c& D, q. l(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件: a n4 |( o0 a/ o) V(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension)
9 ~6 }; b- D* }" t
: M) n# h6 u/ Z/ ~ Q' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件
& ?% N5 _( l, J- o, ^# B! G. S; J5 wIf hasSubFolders And modifySubFolders = vbYes Then# t3 d4 O4 L/ u$ p7 x( o(欢迎访问老王论坛:laowang.vip)
For Each subFolder In folder.SubFolders; P- s3 V: d; ~' H* e) w% \) C9 S7 |(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(subFolder, newExtension)6 ^+ F4 {- D7 Z0 H. `8 T(欢迎访问老王论坛:laowang.vip)
Next
; s* d6 Z+ C: }8 V4 GEnd If
) O" ?# m! H9 S& f. E! ^* \. b) R4 m% p8 K" ?( h3 n(欢迎访问老王论坛:laowang.vip)
' 提示用户操作完成1 L) p6 F& H$ M: K" @# o! ~' y(欢迎访问老王论坛:laowang.vip)
MsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"
+ O. \3 j. C: P4 q- s* k4 E2 f6 q
( w* e) D+ z8 w1 |' T6 g# n' 处理指定目录中的文件的子程序+ m: e, v. S: h(欢迎访问老王论坛:laowang.vip)
Sub ProcessFiles(targetFolder, newExtension)2 F3 E9 z; e- X4 c4 K" t8 j(欢迎访问老王论坛:laowang.vip)
Dim file, oldName, baseName, currentExtension, newName, newFileName, counter0 {7 E- m& a' Z. Z: j5 o(欢迎访问老王论坛:laowang.vip)
Dim nameDict
& x' a* A1 p. ]
* f# s" d1 @! W+ ?; a) K5 \ ' 创建一个字典对象,用于存储当前目录内的文件名
. V' x4 l8 x; Y6 w! x Set nameDict = CreateObject("Scripting.Dictionary")# n ?6 x+ \* Q4 D3 I4 [/ g. a(欢迎访问老王论坛:laowang.vip)
" o1 W; c9 W0 a8 W(欢迎访问老王论坛:laowang.vip)
' 遍历指定目录下的所有文件
' y/ M$ z* d+ k For Each file In targetFolder.Files# s6 E* j* V7 X4 e(欢迎访问老王论坛:laowang.vip)
' 跳过后缀名为 .vbs 的文件- ~( f+ F S( X) {9 A) S(欢迎访问老王论坛:laowang.vip)
If LCase(fso.GetExtensionName(file)) <> "vbs" Then
/ h% V6 w; @5 p; Y/ A* ^/ ^* { ' 获取文件的旧名称、基础名称和当前后缀名% Q9 P0 @$ r# |8 X6 f(欢迎访问老王论坛:laowang.vip)
oldName = file.Name
# l* X& P6 b f _* u3 L baseName = fso.GetBaseName(file)% p+ |; {4 x c2 y y6 ]! w! {(欢迎访问老王论坛:laowang.vip)
currentExtension = LCase(fso.GetExtensionName(file))) k; |; B" R5 |' a3 F/ ] T; R' E(欢迎访问老王论坛:laowang.vip)
2 Q8 M% ]$ D. i3 a: Z. w0 z7 \- u9 y ' 如果当前后缀名与新后缀名不同,则进行重命名
) @# M6 d; j0 T% \; I; m If currentExtension <> LCase(newExtension) Then
0 k4 D m; t5 s- G& v1 n ' 创建新的文件名) B- N: r1 t* B(欢迎访问老王论坛:laowang.vip)
newName = baseName & "." & newExtension) H. T( ^( K$ n& o; m9 i# U# g7 r X(欢迎访问老王论坛:laowang.vip)
1 }. B* b& {& p) }$ F ' 检查是否已有同名文件,如果有,则处理重名
2 [ w: [0 m ~6 I# k newFileName = newName3 e* f K8 n" y x1 ~(欢迎访问老王论坛:laowang.vip)
counter = 1: Y: m1 ?; o2 a- f- a/ j(欢迎访问老王论坛:laowang.vip)
' 确保新的文件名唯一0 M* m. ^ Q2 Q& f( h( q(欢迎访问老王论坛:laowang.vip)
While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)
: y0 m% p0 G* s6 u newFileName = baseName & "(" & counter & ")." & newExtension u! t9 Z A# D6 f% [# K(欢迎访问老王论坛:laowang.vip)
counter = counter + 1
1 x1 z- E* m$ H- L; X Wend
: `7 B# Q: j0 c a8 S$ {# `1 K$ k7 Y$ t# v1 d(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名
1 Q# z2 t E. ] nameDict.Add newFileName, True
6 o5 m5 {! j5 {4 L! ~# y/ \4 L
4 s& i2 t Q/ n. ~# }2 L( H: \' u; g# V ' 重命名文件
7 f X" w5 u* a5 C* q. a file.Name = newFileName, `9 r) m6 R$ [$ f(欢迎访问老王论坛:laowang.vip)
End If, r. y2 N5 z* m1 b: ^(欢迎访问老王论坛:laowang.vip)
End If0 Q+ a: M# | g1 |8 W, {/ j* x% d(欢迎访问老王论坛:laowang.vip)
Next
, o: E& m- M$ {6 e* KEnd Sub
# K, _, Z5 h& [) `7 ], S, V7 z) c# Q$ ]! h(欢迎访问老王论坛:laowang.vip)
6 G$ O% h& _: T* m0 d) E9 F% Z+ s. v: ?& l(欢迎访问老王论坛:laowang.vip)
|