马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):
2 }6 }4 w' n8 z! ]7 \8 V3 {/ p, A, j" L, B(欢迎访问老王论坛:laowang.vip)
, E. i# d7 m4 W9 A0 p* Q1 o(欢迎访问老王论坛:laowang.vip)
' 修改文件后缀名.vbs
, q0 j; h! W# f* \7 D; K, H! H'
2 I+ G( @$ ?# G/ `9 k' 功能说明:/ i$ ]% \' d$ L, ?" V+ I8 e(欢迎访问老王论坛:laowang.vip)
' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。
1 E$ i5 D; X! K5 Y+ E3 b! h4 M x' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。
( l/ @, v" R! l" X/ C( z'
, P; U( t" @0 X# y5 S- J- A' 使用说明:% |; i6 _% h/ u6 A& T(欢迎访问老王论坛:laowang.vip)
' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。
+ S4 M7 v: `# J# `' 2. 双击运行脚本或通过命令行运行。5 m1 j+ }9 ]8 ~1 C7 y(欢迎访问老王论坛:laowang.vip)
' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。5 C6 {, j, r! j! C J& | s(欢迎访问老王论坛:laowang.vip)
' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。
+ e/ T/ F3 u; u! R8 M' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。
% L8 y, K; I+ J8 }, A+ X9 Y2 _8 N' 6. 完成后,脚本会弹出消息框提示操作已成功完成。
& x* Q8 q% ~. I) t3 a# n
0 X4 i3 e" G9 J, ^" DOption Explicit9 b p# }5 q: l# M# s* U! K/ _- y(欢迎访问老王论坛:laowang.vip)
+ e, ~6 L! Z2 V* m T(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的路径$ P" P! _1 F: |3 V! ~( S" ](欢迎访问老王论坛:laowang.vip)
Dim folderPath
- C; y. I9 E* q/ H+ W) ^5 ffolderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")
& ^) k3 `+ j. \% R* b3 D
! X3 U3 d$ H* v' 获取用户输入的新文件后缀名(不包含点)2 p3 \% y5 c6 j2 L) T" y( k" Z(欢迎访问老王论坛:laowang.vip)
Dim newExtension5 a X1 U7 A ?5 v/ A- w9 v7 ^(欢迎访问老王论坛:laowang.vip)
newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")
' c' r1 F, k& z7 h x6 r
( F/ Q) N% h6 q' 如果用户取消了输入框,则退出脚本
# T" A3 ? d' B! gIf newExtension = "" Then; Z( J% P4 E& T4 l9 Z% k7 j(欢迎访问老王论坛:laowang.vip)
MsgBox "操作已取消。", vbInformation, "信息"; m" @7 A7 f7 y }(欢迎访问老王论坛:laowang.vip)
WScript.Quit3 Q, q3 X: e. A; f: R4 {: w(欢迎访问老王论坛:laowang.vip)
End If* A9 x$ u% Q" q, p# M7 K" ?/ u(欢迎访问老王论坛:laowang.vip)
) W7 Z5 }# F: s7 \7 w; l- J( r; g' 确保新的后缀名不包含点(.)
0 n2 }; B% ?1 _, oIf InStr(newExtension, ".") > 0 Then
& t( J5 m- w' j8 [4 r MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"
( a! Z. y9 n- g& |# b WScript.Quit t: U% E* m0 D: R(欢迎访问老王论坛:laowang.vip)
End If
: T$ K6 L5 B: n
8 v/ {- k4 c4 r# L9 j, L' 创建 FileSystemObject 对象
; U* E, g+ M8 {( }Dim fso, folder, subFolder* a+ D3 B) C, [2 b(欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject"), E" Y, X: M D1 U: K(欢迎访问老王论坛:laowang.vip)
) }3 i1 d+ b3 j; \: J% f$ J2 `( v' 获取当前目录的 Folder 对象; _& s" [4 M7 B6 f4 \9 j3 c(欢迎访问老王论坛:laowang.vip)
Set folder = fso.GetFolder(folderPath)/ y8 R6 Z' n) x3 C) \(欢迎访问老王论坛:laowang.vip)
5 ~' w2 N% s. e* y$ u) m1 u4 y(欢迎访问老王论坛:laowang.vip)
' 检查当前目录是否包含子目录: F1 T: X: L+ c; B! a9 [- t$ ](欢迎访问老王论坛:laowang.vip)
Dim hasSubFolders2 J8 D) B9 i- K: {, R! G(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 0
. |: x' `# m9 g5 @% C; b: X1 A% y u3 b4 d(欢迎访问老王论坛:laowang.vip)
' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件 T; r9 ?3 l1 ~% e; w1 e* U(欢迎访问老王论坛:laowang.vip)
Dim modifySubFolders1 Z# ^3 g9 F! m* X2 ? v(欢迎访问老王论坛:laowang.vip)
If hasSubFolders Then
6 s" p, d7 \9 Y* j7 T0 B modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
, {/ B' y G# P; ~- D6 rEnd If& F# c8 L4 O: m- _1 j; _; j+ k(欢迎访问老王论坛:laowang.vip)
/ Q; j$ S6 b, n. A! _- ?' 处理当前目录中的所有文件
; R" p! S2 v( p" q3 d2 uCall ProcessFiles(folder, newExtension)! S# S! z- f) X+ U: ]. I& D' Z(欢迎访问老王论坛:laowang.vip)
- z0 _1 E; w/ v5 X+ D' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件+ O8 M+ u/ N% g: s5 S(欢迎访问老王论坛:laowang.vip)
If hasSubFolders And modifySubFolders = vbYes Then
/ _$ m) z$ H/ Z! a8 E For Each subFolder In folder.SubFolders+ Y7 f \) w) M9 w" j7 u8 Q(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(subFolder, newExtension)( d8 P8 G0 e. H/ I7 K) Y" `# c(欢迎访问老王论坛:laowang.vip)
Next
9 Q& a* x, W5 B: N& N1 \End If
# X# U* Q% N" ^6 M
2 M( w) H7 M& O* B s. R' 提示用户操作完成& l; _$ P- P6 D(欢迎访问老王论坛:laowang.vip)
MsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"0 q$ i9 [/ _ K% ]. C. ?(欢迎访问老王论坛:laowang.vip)
, G* K2 v' ~$ ]1 u) G4 b' 处理指定目录中的文件的子程序# o5 d' S$ X8 G+ g/ p" q$ e. R(欢迎访问老王论坛:laowang.vip)
Sub ProcessFiles(targetFolder, newExtension)
7 Q1 k; m4 y0 W) P8 w. I1 [3 }9 v Dim file, oldName, baseName, currentExtension, newName, newFileName, counter: E& X* N( }1 I" `1 Y8 T9 H3 ~(欢迎访问老王论坛:laowang.vip)
Dim nameDict
5 \. r- R5 H3 L% u" i9 @7 x# D9 V- Z+ M2 x+ y(欢迎访问老王论坛:laowang.vip)
' 创建一个字典对象,用于存储当前目录内的文件名- n% q3 N s" s" V% K! P(欢迎访问老王论坛:laowang.vip)
Set nameDict = CreateObject("Scripting.Dictionary"). ]' c! ?3 ~- y, s1 f(欢迎访问老王论坛:laowang.vip)
! d' g9 v% ]- A+ a$ ~ ' 遍历指定目录下的所有文件
# {% w3 N' ^8 L- i4 g- f* Y For Each file In targetFolder.Files+ q* |0 @; X" Z8 P( Y2 @% A(欢迎访问老王论坛:laowang.vip)
' 跳过后缀名为 .vbs 的文件
6 C% K0 y$ u3 ^% U If LCase(fso.GetExtensionName(file)) <> "vbs" Then" E2 ^1 O7 n) [8 S$ Y(欢迎访问老王论坛:laowang.vip)
' 获取文件的旧名称、基础名称和当前后缀名
2 ~! p7 Z$ }& g* R$ H3 V2 G oldName = file.Name
7 X5 Y# P% _' E baseName = fso.GetBaseName(file)( U) ^$ D4 r k- Q5 t2 i(欢迎访问老王论坛:laowang.vip)
currentExtension = LCase(fso.GetExtensionName(file))" Y$ M5 I% H& u! o( B& x6 D! G7 e(欢迎访问老王论坛:laowang.vip)
- G& c U8 @6 O(欢迎访问老王论坛:laowang.vip)
' 如果当前后缀名与新后缀名不同,则进行重命名/ u* b7 K* `' p(欢迎访问老王论坛:laowang.vip)
If currentExtension <> LCase(newExtension) Then
8 r& T/ I `) T. r* @" Y" c ' 创建新的文件名
1 H5 t1 \4 H. R' G: ]7 o, |/ q: f2 c2 S newName = baseName & "." & newExtension% T0 I8 w& R) L$ _7 S2 T, V(欢迎访问老王论坛:laowang.vip)
8 y8 V. K3 k( d/ D' b; r0 j ' 检查是否已有同名文件,如果有,则处理重名
Q5 E, `9 |) X newFileName = newName2 O% z8 {3 j; v1 a; T- }, u$ s(欢迎访问老王论坛:laowang.vip)
counter = 1
- [: u! _5 Q! G ' 确保新的文件名唯一& E: q }2 N& K, J7 \(欢迎访问老王论坛:laowang.vip)
While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)
f* d1 B Y# X2 K newFileName = baseName & "(" & counter & ")." & newExtension7 k: J& C: Z9 D) ~1 r9 C* t5 B9 _0 O(欢迎访问老王论坛:laowang.vip)
counter = counter + 1
2 Q0 n0 K& `& s; `6 k/ X8 P Wend A/ N* I! d( g( q/ d(欢迎访问老王论坛:laowang.vip)
/ c( f2 k7 }/ N4 U7 v" ?! o ' 记录新的文件名5 G) U9 o1 e2 m4 O(欢迎访问老王论坛:laowang.vip)
nameDict.Add newFileName, True' g m: x6 K. ?, C+ O+ R# T(欢迎访问老王论坛:laowang.vip)
( g$ b: g \ {1 m. ~. z ' 重命名文件" G4 o o* |2 V; W(欢迎访问老王论坛:laowang.vip)
file.Name = newFileName8 e- K3 S1 V [1 N(欢迎访问老王论坛:laowang.vip)
End If0 P$ K4 K; J5 C/ {9 J" Y5 u(欢迎访问老王论坛:laowang.vip)
End If
) f6 F! w$ ~2 f; K b. C9 U Next+ S. Y- m4 h% D- W(欢迎访问老王论坛:laowang.vip)
End Sub2 i' t% b; J: _0 U: b) s(欢迎访问老王论坛:laowang.vip)
* ~- Y, h5 ~$ i/ `8 e5 {6 s
( u% m7 E# w# w6 d2 {( l+ u1 {7 J
: t1 l2 ~" d& w* X3 H7 }& W& @7 V! o |