马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):/ t a/ I; X+ x8 W3 g! A4 L(欢迎访问老王论坛:laowang.vip)
, t4 _% r! `* d9 V* [. X6 D(欢迎访问老王论坛:laowang.vip)
( F$ C9 ~. o% O, u; F: ` e. ~' 修改文件后缀名.vbs1 s9 T. H8 K p0 Y8 W(欢迎访问老王论坛:laowang.vip)
'9 j8 `' u( {) j4 T3 ^7 ~(欢迎访问老王论坛:laowang.vip)
' 功能说明:
; c5 I* d2 a+ d$ F' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。 4 D* i+ c7 g0 v(欢迎访问老王论坛:laowang.vip)
' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。
6 D. T. M0 n/ m% u$ U% f'
2 G! C u3 X: S! N' 使用说明:
; h% I' |6 i+ [) r, F$ [) Q% e' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。
2 h1 a6 u5 W( J) I: H' 2. 双击运行脚本或通过命令行运行。) s, A5 C1 N+ s$ A1 ^) X(欢迎访问老王论坛:laowang.vip)
' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。
) X9 w+ ~6 e2 |4 ] y' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。) [/ E$ a# P& ](欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。
; C- Q3 ]8 p/ @2 Q' 6. 完成后,脚本会弹出消息框提示操作已成功完成。) L5 |( d# ^3 q0 K: N(欢迎访问老王论坛:laowang.vip)
* L U$ E2 V$ ^( v! _; d0 wOption Explicit
0 S7 {# t0 F: P
' j$ _5 O7 a! y$ E. n# {. W, W' 获取当前目录的路径
$ U, x0 U) w7 Y, B/ PDim folderPath m7 [ `. [8 X7 F5 A(欢迎访问老王论坛:laowang.vip)
folderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")
8 {8 l% z; f: S- N4 w! a C5 h6 h% q _(欢迎访问老王论坛:laowang.vip)
' 获取用户输入的新文件后缀名(不包含点)4 i+ F' j {7 W* r8 Q(欢迎访问老王论坛:laowang.vip)
Dim newExtension+ Y4 B+ w0 j- ]) M+ V) a- {(欢迎访问老王论坛:laowang.vip)
newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")
) l( ]; Y9 C+ j7 l3 \
9 r) ^& [! T& w0 X$ q' d' 如果用户取消了输入框,则退出脚本
- S& K0 B* w: W$ |# ^2 MIf newExtension = "" Then
9 e8 u3 W! r) g8 N% E2 t$ v. U1 a MsgBox "操作已取消。", vbInformation, "信息"- Q5 j' h% `, j. _$ s" @(欢迎访问老王论坛:laowang.vip)
WScript.Quit
' T% F0 i n6 _$ IEnd If! B' a) l7 B- Q8 q! @(欢迎访问老王论坛:laowang.vip)
+ S S. y( g. J$ U5 P+ X: Z$ [& f' 确保新的后缀名不包含点(.)4 i7 G( {& h. I5 K3 D(欢迎访问老王论坛:laowang.vip)
If InStr(newExtension, ".") > 0 Then& R7 X3 T; {0 u5 o/ f(欢迎访问老王论坛:laowang.vip)
MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"
. I4 V. |0 r; _2 Q% R) u WScript.Quit
. [) f9 H8 A; WEnd If! b; d# F9 G1 @0 L& S4 A(欢迎访问老王论坛:laowang.vip)
7 p G8 _8 D8 h t3 M(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象' M- W% B( T2 S7 q. S, e& q1 c(欢迎访问老王论坛:laowang.vip)
Dim fso, folder, subFolder
- n# D" W! h: a. ASet fso = CreateObject("Scripting.FileSystemObject")
! r6 M4 t# w! y2 j5 [. G
/ e, u5 E6 t; g5 D: m' 获取当前目录的 Folder 对象
, S4 L5 ? L" t0 V; b! y$ LSet folder = fso.GetFolder(folderPath)
* c2 S5 D7 y# I$ [1 _' M$ E3 K9 w3 E. w _0 s(欢迎访问老王论坛:laowang.vip)
' 检查当前目录是否包含子目录
j; J1 h# X' t F1 \Dim hasSubFolders
@& @8 n( g x( x7 v4 ^hasSubFolders = folder.SubFolders.Count > 0
$ _ h* J, r% I5 |: X9 Y: i
0 j( K) x! [0 _3 M. H' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件+ U r+ G7 R. ~ Q2 A% R(欢迎访问老王论坛:laowang.vip)
Dim modifySubFolders5 x0 `5 t, \( W0 Z) B(欢迎访问老王论坛:laowang.vip)
If hasSubFolders Then: @, K- b$ L0 G% P0 ~(欢迎访问老王论坛:laowang.vip)
modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
+ X5 K1 A8 K5 p* ` u0 f4 b% QEnd If* a9 g B- g5 o0 q8 ~9 i7 L(欢迎访问老王论坛:laowang.vip)
# C8 V! m/ n6 G D3 G1 K(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件
- ^: C, g0 g% T% b" x5 FCall ProcessFiles(folder, newExtension), k$ i- S Z: B/ n0 c(欢迎访问老王论坛:laowang.vip)
, d% k0 \2 X$ g- T8 J9 Y: J: ^(欢迎访问老王论坛:laowang.vip)
' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件
/ X: R/ J0 T5 X- P9 ~- a# k$ |If hasSubFolders And modifySubFolders = vbYes Then1 O4 x( \$ i) ^6 V(欢迎访问老王论坛:laowang.vip)
For Each subFolder In folder.SubFolders
( N1 a' k7 m& @; `8 u) C" G" ] Call ProcessFiles(subFolder, newExtension)1 X. a: A: g& v. H$ M: Y. i(欢迎访问老王论坛:laowang.vip)
Next6 f7 w" v. `9 Y# J8 \* d H(欢迎访问老王论坛:laowang.vip)
End If C4 M" |6 y9 p! {2 _* L( f(欢迎访问老王论坛:laowang.vip)
& O% A( E1 l" H2 y g' t' 提示用户操作完成
# S! ~7 a' Z }9 dMsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"
* U$ `2 p" i( i8 H1 G8 ?& k# G. M; k5 b1 G) ~. y& v1 Q(欢迎访问老王论坛:laowang.vip)
' 处理指定目录中的文件的子程序
# G$ l, P8 n; w) CSub ProcessFiles(targetFolder, newExtension)0 V9 W2 T/ T( @1 ]4 |8 w: ?(欢迎访问老王论坛:laowang.vip)
Dim file, oldName, baseName, currentExtension, newName, newFileName, counter
1 `( [0 n Y; V- i. ?& z+ q Dim nameDict
6 \/ x- z! v0 E% |2 [1 p4 l4 N6 {9 S% Q, N; W+ Z(欢迎访问老王论坛:laowang.vip)
' 创建一个字典对象,用于存储当前目录内的文件名
. ]) E5 H* i1 Y& h+ T Set nameDict = CreateObject("Scripting.Dictionary")7 F+ V: ^4 d- F7 {5 n(欢迎访问老王论坛:laowang.vip)
7 Z6 A5 @) o, t Q) _ ' 遍历指定目录下的所有文件5 C k. O' F/ S- X(欢迎访问老王论坛:laowang.vip)
For Each file In targetFolder.Files, V2 c. z2 {8 O* {(欢迎访问老王论坛:laowang.vip)
' 跳过后缀名为 .vbs 的文件 M5 ^5 L' F0 p, p(欢迎访问老王论坛:laowang.vip)
If LCase(fso.GetExtensionName(file)) <> "vbs" Then
' e/ v5 Q" ?( a# z9 V/ w$ [8 x6 B ' 获取文件的旧名称、基础名称和当前后缀名4 V, T c4 ?6 ^0 j) i(欢迎访问老王论坛:laowang.vip)
oldName = file.Name
$ T2 [: E' f1 h% _' Z baseName = fso.GetBaseName(file)
4 `" R2 |9 i0 E8 M* Z/ ]- o& [# | currentExtension = LCase(fso.GetExtensionName(file))
* U) i `( h2 P: e) F R
: C4 z! j" S" H3 P ' 如果当前后缀名与新后缀名不同,则进行重命名
! k2 b1 U+ u( q* q: O1 c0 ?* [ If currentExtension <> LCase(newExtension) Then! K$ Y; i! ]# j% R6 F/ S(欢迎访问老王论坛:laowang.vip)
' 创建新的文件名 ]- L" b1 S. b# H7 {(欢迎访问老王论坛:laowang.vip)
newName = baseName & "." & newExtension
* ^* B& C0 D2 j k5 a8 y8 |0 S
( j( |4 [. S2 Z& `! K8 z o( x$ [ ' 检查是否已有同名文件,如果有,则处理重名
/ T! k* n7 p, t @: C! z newFileName = newName* E( |- n. X+ j3 F3 A(欢迎访问老王论坛:laowang.vip)
counter = 1/ _ J6 z3 y, m1 X) C(欢迎访问老王论坛:laowang.vip)
' 确保新的文件名唯一; B6 U' ] c3 p- W3 E(欢迎访问老王论坛:laowang.vip)
While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)
$ u0 v& ^' @2 R ? newFileName = baseName & "(" & counter & ")." & newExtension
; `/ ?* F4 s6 k" x5 E counter = counter + 1
8 f; B, w9 F' S6 q0 p, I' \9 b w Wend
4 B2 r& E2 b: B5 T
4 c/ k7 K4 T8 {! y* { ' 记录新的文件名5 a6 W, }$ v! M(欢迎访问老王论坛:laowang.vip)
nameDict.Add newFileName, True' h' Y7 u4 |) |6 |% |, x(欢迎访问老王论坛:laowang.vip)
: ^& z N# m/ A. T1 k# D9 u ' 重命名文件# w, K: K% S/ ~(欢迎访问老王论坛:laowang.vip)
file.Name = newFileName, D; j/ S. U4 |(欢迎访问老王论坛:laowang.vip)
End If
, h9 n |2 \* e- r1 g End If$ `: `+ c4 m; f: ?(欢迎访问老王论坛:laowang.vip)
Next
- L# }; \8 w J! YEnd Sub
9 |& X1 @' @9 k% b+ D$ j2 t; g& d6 |" K# K# y(欢迎访问老王论坛:laowang.vip)
5 a5 M" D% n V# \0 P
3 j7 T6 ~5 Q7 @' U% a5 i# Q" e |