马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):9 o3 e2 p- ~ [; i3 U; t(欢迎访问老王论坛:laowang.vip)
9 y# b) T9 K% {+ c(欢迎访问老王论坛:laowang.vip)
9 h; A5 y3 ^% X* f. y H(欢迎访问老王论坛:laowang.vip)
' 修改文件后缀名.vbs" A, W. S6 R/ N/ A' q; g Y(欢迎访问老王论坛:laowang.vip)
'- d# Y1 ~1 e4 U4 n+ w5 g" a(欢迎访问老王论坛:laowang.vip)
' 功能说明:( { a, u; Z. r4 H(欢迎访问老王论坛:laowang.vip)
' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。
; J! P- ^7 [: q; a2 a# o7 L' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。
& I+ O2 v% y" u0 U: ]/ Z" z'
3 L' f1 D! T+ m4 I0 e# c1 T. k' 使用说明:& A D% @& l& y- V3 G6 G/ @4 z: m/ ](欢迎访问老王论坛:laowang.vip)
' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。- s/ O! Y9 X- t0 x. J% G- Y \(欢迎访问老王论坛:laowang.vip)
' 2. 双击运行脚本或通过命令行运行。
$ L. }; r' X9 s7 C9 K' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。 x* v1 u) e; m% S0 Z: ^& a6 [1 E(欢迎访问老王论坛:laowang.vip)
' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。( v: C9 {) O! D4 `8 Y S(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。' i/ g6 v- `. L6 I; x9 A7 f' |(欢迎访问老王论坛:laowang.vip)
' 6. 完成后,脚本会弹出消息框提示操作已成功完成。
: ]4 Q. I( e) _! @
9 k: ^* f( j; L- \1 L Q* |% W4 |Option Explicit
4 x9 e9 D2 A! D$ H. u0 r# e
0 c M( k* c% o1 \- J- i, y% t* \' 获取当前目录的路径0 C" L \1 U% Z5 M5 r& n(欢迎访问老王论坛:laowang.vip)
Dim folderPath8 v& y8 s. P! m* V1 z(欢迎访问老王论坛:laowang.vip)
folderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")( X: M$ m8 i! C8 _- ^( n(欢迎访问老王论坛:laowang.vip)
$ A$ C/ C% @# X/ _' 获取用户输入的新文件后缀名(不包含点)
6 M- M. c6 w. f& t8 j7 U/ sDim newExtension
# o$ C( u E# pnewExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")0 p1 H) r. X4 D# e* i$ w; B7 C$ ^/ S(欢迎访问老王论坛:laowang.vip)
9 U+ u4 R; x- Y' 如果用户取消了输入框,则退出脚本
: i; F, c- B U: h n* C$ dIf newExtension = "" Then
/ q- B/ {% U4 L. j! p MsgBox "操作已取消。", vbInformation, "信息", s' H9 a" }4 N2 Z$ p(欢迎访问老王论坛:laowang.vip)
WScript.Quit& E0 m- Z* I, G( D& {3 u; x6 R: W(欢迎访问老王论坛:laowang.vip)
End If
+ z$ ]) k( c3 v# @# U, v$ \+ d2 B& p! w: e" p8 x3 g/ b(欢迎访问老王论坛:laowang.vip)
' 确保新的后缀名不包含点(.)
( @1 U$ m l7 mIf InStr(newExtension, ".") > 0 Then7 l+ N3 {, e, f* r. @(欢迎访问老王论坛:laowang.vip)
MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"
( z9 ]' l# [6 a. S WScript.Quit
8 i; K! X$ m0 u" s& D5 O' uEnd If
) Q* t3 Z7 T: u% y: b. Y( L
" k M4 g6 G1 |9 `- ?' 创建 FileSystemObject 对象
S/ V8 U, A& ~7 N6 C+ |Dim fso, folder, subFolder. F0 o8 O. q7 h" |" j' m" X(欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject"). y; n/ P/ t8 r- o6 G. Y(欢迎访问老王论坛:laowang.vip)
7 P" w" S3 A2 J8 C: f" c' 获取当前目录的 Folder 对象
+ k0 q, A- I! [* j) L: z [Set folder = fso.GetFolder(folderPath); j) H$ j2 {" p2 }5 I(欢迎访问老王论坛:laowang.vip)
8 f( W8 `$ |; j9 A% M2 f- q9 t: H" u' 检查当前目录是否包含子目录
( K' U; w t8 O5 fDim hasSubFolders6 y4 E1 x" m$ A2 h1 Y: G(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 0
% U% k. \4 b& q2 s8 y5 n: \0 u+ i b& @(欢迎访问老王论坛:laowang.vip)
' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件& l' N/ y1 B9 s( ?& q/ l(欢迎访问老王论坛:laowang.vip)
Dim modifySubFolders( [7 v% X) v) N! T; j(欢迎访问老王论坛:laowang.vip)
If hasSubFolders Then
7 |- @8 O+ t$ i+ y0 m/ X+ ]! J2 n modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")# `; `, h) n7 |/ O; l& x- [& u(欢迎访问老王论坛:laowang.vip)
End If
% `, q; a0 v7 }' V( [! y: O. t
6 G+ l$ `/ W1 k! N, I' 处理当前目录中的所有文件
( j& ~9 e! t! V, l" k" YCall ProcessFiles(folder, newExtension)
4 X9 {, P0 f+ H( n1 ]' x& n6 i( w6 l, p; y$ ]1 p1 W: u- g(欢迎访问老王论坛:laowang.vip)
' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件6 ~) {& q$ | V: s$ I(欢迎访问老王论坛:laowang.vip)
If hasSubFolders And modifySubFolders = vbYes Then7 V& J" M; F7 a! M/ b(欢迎访问老王论坛:laowang.vip)
For Each subFolder In folder.SubFolders
$ N& ~/ U S6 h$ \8 H$ D0 [ Call ProcessFiles(subFolder, newExtension)# K* t$ s$ ]6 \# |5 ^5 U(欢迎访问老王论坛:laowang.vip)
Next7 K( D }( @3 Q4 n4 C3 h(欢迎访问老王论坛:laowang.vip)
End If! \; K) y T- Z3 R, a: k(欢迎访问老王论坛:laowang.vip)
: v1 M3 T0 O% Q4 ~( N9 z' 提示用户操作完成9 e& P8 t3 x/ q& H) s(欢迎访问老王论坛:laowang.vip)
MsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"7 O( N. A+ d0 n, F- g(欢迎访问老王论坛:laowang.vip)
. w6 h3 q! z* Z2 |" P$ O' 处理指定目录中的文件的子程序
+ F% H# \$ j$ c4 T: R) N' k+ hSub ProcessFiles(targetFolder, newExtension). I5 q" B3 l; c) U( f3 @# P- X8 ~(欢迎访问老王论坛:laowang.vip)
Dim file, oldName, baseName, currentExtension, newName, newFileName, counter
5 W# I+ [5 J5 u/ k J8 i0 | Dim nameDict
4 Q+ X& t8 p3 ?' n2 L" g
+ x' Z: g y$ Z5 {5 c ' 创建一个字典对象,用于存储当前目录内的文件名0 X! M# ?1 I) E! B5 |$ h& [. K(欢迎访问老王论坛:laowang.vip)
Set nameDict = CreateObject("Scripting.Dictionary")
1 M0 [5 h; i, u
4 U6 ?! A: N4 [% ]. j4 n! s5 ~ ' 遍历指定目录下的所有文件
0 T) H" S; N( H _ R For Each file In targetFolder.Files; [: t$ s' ]9 H- q' l; D# d' @! P(欢迎访问老王论坛:laowang.vip)
' 跳过后缀名为 .vbs 的文件
; y! }. f E6 t# i3 m If LCase(fso.GetExtensionName(file)) <> "vbs" Then
4 a+ D* t* `$ Q: I0 t+ f. Z; N& r ' 获取文件的旧名称、基础名称和当前后缀名
$ [& W4 h: ^4 S. J! B- e oldName = file.Name
$ E$ ^, h0 x& _ J/ s- \ baseName = fso.GetBaseName(file)
% \' k. X* x4 u3 @% v currentExtension = LCase(fso.GetExtensionName(file))7 f' w8 ~, {1 W5 e' m: D(欢迎访问老王论坛:laowang.vip)
0 e7 `6 |! p$ Z |* y(欢迎访问老王论坛:laowang.vip)
' 如果当前后缀名与新后缀名不同,则进行重命名 z/ T3 ~2 F$ Y- {(欢迎访问老王论坛:laowang.vip)
If currentExtension <> LCase(newExtension) Then
3 i- a8 p/ s+ y4 h ' 创建新的文件名3 i6 k5 X* w% R! |& s* v- b; m(欢迎访问老王论坛:laowang.vip)
newName = baseName & "." & newExtension
+ W0 K/ O- O) F1 | H9 u5 C$ }3 E1 s' U(欢迎访问老王论坛:laowang.vip)
' 检查是否已有同名文件,如果有,则处理重名
4 n2 x* S/ @! y8 J7 ^+ V# B newFileName = newName
; r# ~1 e% _1 v# o7 b n; K w counter = 1
: I& f3 m9 J- A- n ' 确保新的文件名唯一
- I" q# j1 ?8 L) C4 M While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)9 f- r5 X9 D. M. o7 `1 r(欢迎访问老王论坛:laowang.vip)
newFileName = baseName & "(" & counter & ")." & newExtension
0 |6 D. r' Y5 y counter = counter + 1
0 g0 g) D. `/ Z% w: R9 M2 z Wend5 E$ q3 V% J( E(欢迎访问老王论坛:laowang.vip)
" y5 Z, Z" u9 I" }7 o% `, a(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名; v' r( Q. B: r% \7 n- K(欢迎访问老王论坛:laowang.vip)
nameDict.Add newFileName, True
` a+ `, K6 y! t! _' L' u
, c/ w w( r* r* `) L5 Q* S* m ' 重命名文件
# [! D5 Y/ h; F* F. |, C. p! s file.Name = newFileName9 h( N% O3 r- Q" P* {" |9 f+ j(欢迎访问老王论坛:laowang.vip)
End If
" P$ H1 @) \7 v G Q/ } End If
6 t+ S$ z+ Q* N* b- F% f5 G0 n Next; F4 b4 x. A( l/ X1 i# S- q g(欢迎访问老王论坛:laowang.vip)
End Sub! H, D) m' o# `* E" \" A n( O! S(欢迎访问老王论坛:laowang.vip)
# O: }6 R p, y2 }(欢迎访问老王论坛:laowang.vip)
: M: L, w, d" O' E% g; S(欢迎访问老王论坛:laowang.vip)
/ A; K9 n! g3 j% c7 \# m1 E% @* T0 A(欢迎访问老王论坛:laowang.vip)
|