马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):3 k% k% N, f& t. c. l(欢迎访问老王论坛:laowang.vip)
/ |" w, Q U" \* q d(欢迎访问老王论坛:laowang.vip)
6 S1 W6 f# i0 G0 o0 _(欢迎访问老王论坛:laowang.vip)
' 修改文件后缀名.vbs+ |1 _( T: J: [6 m4 k# }(欢迎访问老王论坛:laowang.vip)
'' f; }, _. n: `# S" v6 Y* W, Z) D(欢迎访问老王论坛:laowang.vip)
' 功能说明:
6 ?9 e9 _$ t3 ]6 s) I L- T( S2 b' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。 0 ?5 ?2 v& A E w) a G7 Q+ i(欢迎访问老王论坛:laowang.vip)
' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。* S& j0 v' g+ X9 n. b+ Y$ J6 }- P(欢迎访问老王论坛:laowang.vip)
'3 L! w$ e2 q+ p9 F7 e(欢迎访问老王论坛:laowang.vip)
' 使用说明:+ K) w6 G% _% f; s% M& d2 @(欢迎访问老王论坛:laowang.vip)
' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。
' j. A2 ]% u$ }+ R V% z2 j' 2. 双击运行脚本或通过命令行运行。! @, l5 U6 P/ Y# o- z b(欢迎访问老王论坛:laowang.vip)
' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。5 q# N& |& a# |6 k0 ](欢迎访问老王论坛:laowang.vip)
' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。0 b4 K5 w2 o/ V(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。
/ D i# H9 _9 ]& U2 z0 X( z' 6. 完成后,脚本会弹出消息框提示操作已成功完成。% z2 E" H6 z; {' R' L5 t(欢迎访问老王论坛:laowang.vip)
: g: K1 {7 V1 `/ q" ` Y8 OOption Explicit
" T. a& C6 F+ Y7 W5 I' p% \" \5 j( A3 ^(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的路径0 B" Y3 ^% X8 C7 _( a(欢迎访问老王论坛:laowang.vip)
Dim folderPath0 p6 Y1 W: L9 N% |2 z n( t(欢迎访问老王论坛:laowang.vip)
folderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")0 q9 u9 E0 O6 R- i; X(欢迎访问老王论坛:laowang.vip)
6 T7 m- Z* N' p& |(欢迎访问老王论坛:laowang.vip)
' 获取用户输入的新文件后缀名(不包含点)2 U/ v! E/ g k, h( i2 l7 l1 \(欢迎访问老王论坛:laowang.vip)
Dim newExtension& i) A4 X* \( b9 q* n(欢迎访问老王论坛:laowang.vip)
newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")* ]. N8 v1 M& l$ ~4 T, m/ m(欢迎访问老王论坛:laowang.vip)
( @5 v; }0 j! T: v0 d Y0 ^% T- W, P(欢迎访问老王论坛:laowang.vip)
' 如果用户取消了输入框,则退出脚本
) {! G0 ~1 t4 ~, a* LIf newExtension = "" Then
- ^. ]$ F9 g m MsgBox "操作已取消。", vbInformation, "信息"
" n/ c, ]7 e; ~; [ r5 N WScript.Quit
5 O* i4 G; e7 z3 B9 v3 K5 n8 L+ ~End If
0 ^/ h5 `8 q" y. d. }% y2 {0 g4 k4 {( l' _+ J# e(欢迎访问老王论坛:laowang.vip)
' 确保新的后缀名不包含点(.)
) ~- J# I0 b/ l( nIf InStr(newExtension, ".") > 0 Then/ T! J4 F$ v' c8 J# r+ [1 U(欢迎访问老王论坛:laowang.vip)
MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"
# H- o: }6 A# V WScript.Quit
- ~3 ?$ D( X. C$ Q0 }; I" eEnd If5 j8 _' }6 @, H( L(欢迎访问老王论坛:laowang.vip)
# ?; A: b& m8 S# ^( L(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象% k- {( Q+ H9 w(欢迎访问老王论坛:laowang.vip)
Dim fso, folder, subFolder
5 L; G" q* z' n4 [Set fso = CreateObject("Scripting.FileSystemObject")
K% m6 w* V9 S. r4 r
: z( F5 y. |4 Y' 获取当前目录的 Folder 对象
1 u$ E5 \6 E" L+ o& DSet folder = fso.GetFolder(folderPath)
& q+ v1 [: H! m3 C, g& k. V" K' }$ E& @. m6 D# p! A( l. s; s; \9 g8 t* o(欢迎访问老王论坛:laowang.vip)
' 检查当前目录是否包含子目录
- x7 W0 y' t- W7 F& P9 FDim hasSubFolders8 I( F j" |6 p- b/ k(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 05 c- W+ \3 O# [! B' q(欢迎访问老王论坛:laowang.vip)
) i% _ j: q0 \! S(欢迎访问老王论坛:laowang.vip)
' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件5 k$ }' } N- b) C7 ~+ @+ j$ {) @0 p(欢迎访问老王论坛:laowang.vip)
Dim modifySubFolders
* a3 x0 j# a$ Q7 J& s/ UIf hasSubFolders Then
2 q! A/ W5 b B1 P. ] modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
5 l/ x9 A. T c. {End If9 ]0 d9 X; A* j4 `. \( t8 O' e(欢迎访问老王论坛:laowang.vip)
8 z+ Z; s) D9 Y/ ]' R' 处理当前目录中的所有文件
. v" x! J, D# z: J& _Call ProcessFiles(folder, newExtension)) v3 _2 X1 j9 Y(欢迎访问老王论坛:laowang.vip)
Y1 c; y0 _7 O4 W0 ^; ?' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件/ y! G8 S$ }( d- z- b3 D3 a(欢迎访问老王论坛:laowang.vip)
If hasSubFolders And modifySubFolders = vbYes Then
0 W* F, l2 o7 Q, \% L4 w h7 D For Each subFolder In folder.SubFolders
& ^( W* |$ U9 n$ J8 F) p/ } Call ProcessFiles(subFolder, newExtension)
, T B# p& y3 X$ c+ [* s' Q2 e1 x5 A; n7 Q% x Next2 x2 F6 W B9 P9 Y1 q(欢迎访问老王论坛:laowang.vip)
End If
Z+ D! b6 y; A7 `4 l+ M# E; l* s
5 n& Q+ T2 {0 S' 提示用户操作完成
! ~: P/ i! K7 S( \MsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"
$ X$ p$ w6 W5 E/ v# N; L, }9 V* l8 {- S' d2 {(欢迎访问老王论坛:laowang.vip)
' 处理指定目录中的文件的子程序
% e) r* ?8 }. t/ Z0 ? BSub ProcessFiles(targetFolder, newExtension)- {9 \2 ?& y1 s(欢迎访问老王论坛:laowang.vip)
Dim file, oldName, baseName, currentExtension, newName, newFileName, counter
9 Q2 y, i/ h. n/ O5 P Dim nameDict
$ a4 x8 u. u( M% w" `7 e
" e! i& f4 h4 [; W; n6 ^1 i5 c" [ ' 创建一个字典对象,用于存储当前目录内的文件名1 a$ f! s* ?: M, n(欢迎访问老王论坛:laowang.vip)
Set nameDict = CreateObject("Scripting.Dictionary"): T& s2 v2 r- h2 _(欢迎访问老王论坛:laowang.vip)
: ]4 U. F" Q; s' J& ^ ' 遍历指定目录下的所有文件; l/ h. H8 u' N" e, j+ x7 V(欢迎访问老王论坛:laowang.vip)
For Each file In targetFolder.Files
$ a- _! t6 r1 M1 F ' 跳过后缀名为 .vbs 的文件
$ v$ R m6 f# A9 p' L0 } If LCase(fso.GetExtensionName(file)) <> "vbs" Then" Q3 y! b6 ~" Z9 F* H(欢迎访问老王论坛:laowang.vip)
' 获取文件的旧名称、基础名称和当前后缀名4 M; O3 @7 i, C) ] G9 q(欢迎访问老王论坛:laowang.vip)
oldName = file.Name
3 u/ e; @, X. l$ Y! |4 X- A: X baseName = fso.GetBaseName(file)
; X) F4 l, v9 T, H currentExtension = LCase(fso.GetExtensionName(file))7 Z; `# |4 C6 Y1 \8 A6 c) R(欢迎访问老王论坛:laowang.vip)
# B l2 }, B, Y; Q(欢迎访问老王论坛:laowang.vip)
' 如果当前后缀名与新后缀名不同,则进行重命名
* ?3 H% p7 d' X- m c) h1 H6 ~% l If currentExtension <> LCase(newExtension) Then: R1 `8 e" q9 N+ D+ V) u1 R$ V6 [(欢迎访问老王论坛:laowang.vip)
' 创建新的文件名
1 h. J) X8 q: `* ]- ~9 ^8 \3 y newName = baseName & "." & newExtension
$ c) [" {7 D: h' U
( a2 e# J2 e, g. H5 k1 x* r3 C ' 检查是否已有同名文件,如果有,则处理重名
4 \5 l8 M; s# j" v9 o& N newFileName = newName
" [# n1 v5 N y; k( i- V1 h counter = 1
K. }$ @& M t3 y" D; L ' 确保新的文件名唯一
q% h4 Q) k% o: u While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)
4 t; b8 j! }& s# w/ C2 Q: z# h% c newFileName = baseName & "(" & counter & ")." & newExtension$ Z) w2 G% i& r(欢迎访问老王论坛:laowang.vip)
counter = counter + 1
9 ?) |' A3 l5 X7 E Wend
9 p4 O+ `( P, H5 ]) k6 K7 H2 x5 O. H5 T( t% D' t/ y1 a(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名3 i2 {8 M" f- D7 V3 f; V% X(欢迎访问老王论坛:laowang.vip)
nameDict.Add newFileName, True
& V6 U1 v8 f1 B7 s0 F& z1 C& i" Y4 a(欢迎访问老王论坛:laowang.vip)
' 重命名文件0 Q( `- r& _9 I F( i, r(欢迎访问老王论坛:laowang.vip)
file.Name = newFileName& g% U9 y; p) S L(欢迎访问老王论坛:laowang.vip)
End If
( g1 b8 f! k+ N3 q6 T$ y End If
4 N6 V/ @5 `4 n Next
3 N- W# t* S( B' w( x8 w+ lEnd Sub
2 q4 k2 O! u' I( i
, N6 {- A, h# l$ Q7 Y' V3 @+ r) I, r* b(欢迎访问老王论坛:laowang.vip)
, |3 e" M$ E: f2 W, @& _' K* ] |