马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):; I. r2 [9 C1 H9 m; A(欢迎访问老王论坛:laowang.vip)
$ ^# c, _2 R o3 q% m y' S1 e
! t9 C8 j* f) @0 @9 U' 修改文件后缀名.vbs2 ]6 Y" `7 W+ A' U& ~' P(欢迎访问老王论坛:laowang.vip)
'
6 a9 C. l% E/ m3 z( W' 功能说明:6 _5 J8 A6 d3 Q8 M(欢迎访问老王论坛:laowang.vip)
' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。
) d& K5 {' a7 C, G D2 z1 }' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。+ J: s1 h# t; q0 A(欢迎访问老王论坛:laowang.vip)
'& \& |: q( g# l' ?, I. q: J) K. b(欢迎访问老王论坛:laowang.vip)
' 使用说明:
1 h# ]+ r5 _6 _( I4 ]' n# Y' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。
, o! i/ n( l& f) [/ C' 2. 双击运行脚本或通过命令行运行。
4 i. i$ z# ]* |* P6 ^' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。
/ J3 ~$ s! r. g: O: d' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。* [: s$ M" O9 W( }- w% q(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。! _4 O) |' i7 H4 |$ @" k5 k1 q(欢迎访问老王论坛:laowang.vip)
' 6. 完成后,脚本会弹出消息框提示操作已成功完成。
/ \5 l8 \2 O. S" Z# D; p6 r3 G0 C4 x! S7 y4 z: }& q+ N(欢迎访问老王论坛:laowang.vip)
Option Explicit6 g8 e( G4 G% ]/ j/ M+ F(欢迎访问老王论坛:laowang.vip)
2 f1 W: M4 N" j5 b9 P' 获取当前目录的路径
" v" Z% [; N1 _$ NDim folderPath
# m2 T8 Z0 Z/ Z7 o4 F# m! dfolderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")5 i5 F' M# [5 G6 L(欢迎访问老王论坛:laowang.vip)
/ U, e8 R/ _5 o/ h: ~& ?" p(欢迎访问老王论坛:laowang.vip)
' 获取用户输入的新文件后缀名(不包含点)# T0 o$ |+ u! G, P7 n, z0 D* C8 B(欢迎访问老王论坛:laowang.vip)
Dim newExtension+ K+ ]* u$ U* Q) o1 E(欢迎访问老王论坛:laowang.vip)
newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")
" c' f! l! I" g! s9 @- P6 {" ?' u4 l
9 h& T5 u0 w7 l2 L+ i' 如果用户取消了输入框,则退出脚本' K3 t2 _2 |9 ~, {0 ^. u4 d# f. }$ ^(欢迎访问老王论坛:laowang.vip)
If newExtension = "" Then9 u( _: C! J5 U! @1 e/ {" g(欢迎访问老王论坛:laowang.vip)
MsgBox "操作已取消。", vbInformation, "信息"
+ B1 l D% O1 U WScript.Quit! f( o3 D% G. `6 m/ {(欢迎访问老王论坛:laowang.vip)
End If
: C! L0 L5 b$ }& b" y
) Z5 I0 S9 |9 s. O9 l' 确保新的后缀名不包含点(.)/ e: H0 J9 S4 C8 ^(欢迎访问老王论坛:laowang.vip)
If InStr(newExtension, ".") > 0 Then' {7 {2 ]- }" q s7 M# i5 {(欢迎访问老王论坛:laowang.vip)
MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"$ M% p3 [7 h8 I8 \: o: J; y6 B(欢迎访问老王论坛:laowang.vip)
WScript.Quit
2 {. h* x# ?& E0 O4 S1 FEnd If7 H( ]* F: ~. o5 V; e% X& v(欢迎访问老王论坛:laowang.vip)
% E. l. \' G6 Q# U6 V(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象
" u6 j& M% k5 w8 b) d0 e9 m1 K7 kDim fso, folder, subFolder
" J- @* a! t" d% l( ?% [Set fso = CreateObject("Scripting.FileSystemObject")
/ P) ?7 m3 S( K: g3 z% P
% H5 l G; E) W+ B. j/ b% A' 获取当前目录的 Folder 对象
1 z4 E: @% [; Q; ? {! C. k# NSet folder = fso.GetFolder(folderPath)1 p. ~1 f/ k- ` P# `, v(欢迎访问老王论坛:laowang.vip)
& U& G$ v6 Q2 q# d3 H$ Y4 s' 检查当前目录是否包含子目录
" T9 S i2 `) c3 x2 ]Dim hasSubFolders
! c1 E7 z6 j4 [2 F. k+ M' YhasSubFolders = folder.SubFolders.Count > 0' r8 |& S" S* ]+ {3 q8 Y9 u3 h5 }(欢迎访问老王论坛:laowang.vip)
' k3 _- \+ _. v) X! z E(欢迎访问老王论坛:laowang.vip)
' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件
0 x2 S( \, W. i! wDim modifySubFolders* m5 n% h$ j9 v7 k+ O; Q5 v: u) x(欢迎访问老王论坛:laowang.vip)
If hasSubFolders Then
" o& W; O1 M4 f3 F modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件") T4 r8 G/ T- s: t(欢迎访问老王论坛:laowang.vip)
End If8 Y& f6 g0 Z; X3 i* f(欢迎访问老王论坛:laowang.vip)
: D$ J6 G7 i3 K& j(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件% x) X0 e5 M4 c r+ \0 j! J' G7 w(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension)9 K5 E/ N9 X `0 X4 ^1 R u2 [(欢迎访问老王论坛:laowang.vip)
8 g# R* o! [- k8 s4 T: [(欢迎访问老王论坛:laowang.vip)
' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件
* D# O" _6 f' [' ?9 IIf hasSubFolders And modifySubFolders = vbYes Then
9 A4 |0 |. _; t" y For Each subFolder In folder.SubFolders
# v8 t* v" u6 M; n2 e Call ProcessFiles(subFolder, newExtension)4 p- Y2 G' i, z/ P4 u! b6 o8 c(欢迎访问老王论坛:laowang.vip)
Next
" z; u' L" V- a @( Y4 \End If9 w, Z7 @5 J$ V! L! w3 R(欢迎访问老王论坛:laowang.vip)
5 M8 p- [ ?/ J) V(欢迎访问老王论坛:laowang.vip)
' 提示用户操作完成
; Q5 e. o% O+ q" sMsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"' ~* g3 h2 G+ G! H9 O. m z# b/ e(欢迎访问老王论坛:laowang.vip)
5 H$ _3 C j. O' W: c' 处理指定目录中的文件的子程序4 p! F1 R g1 [' P* L0 j(欢迎访问老王论坛:laowang.vip)
Sub ProcessFiles(targetFolder, newExtension)
9 I8 T8 Q h0 ~- B0 M; U5 z Dim file, oldName, baseName, currentExtension, newName, newFileName, counter
" ]7 P! k; O1 _2 l) P$ z9 O Dim nameDict
. m' f* T' y' ~1 T
; }0 `8 i( e2 c/ X8 S! m ' 创建一个字典对象,用于存储当前目录内的文件名% i' h* I! g5 j6 G# ?& Q(欢迎访问老王论坛:laowang.vip)
Set nameDict = CreateObject("Scripting.Dictionary")
) N0 ~: C6 T( }5 L# w7 Q
2 N! E7 r( \. |2 A ' 遍历指定目录下的所有文件
; s: h' C! {" R& i3 s5 ~ For Each file In targetFolder.Files
! m1 ^/ X& g: l, o0 O) s" a ' 跳过后缀名为 .vbs 的文件
" b, F& ?# h S3 P2 J% U0 ^5 n/ E$ g If LCase(fso.GetExtensionName(file)) <> "vbs" Then
, |% `2 h, f8 o' |$ F/ D9 z ' 获取文件的旧名称、基础名称和当前后缀名6 }4 n4 {* ]7 _) j. E9 U(欢迎访问老王论坛:laowang.vip)
oldName = file.Name2 s3 h7 R5 x; r4 I/ ]/ S(欢迎访问老王论坛:laowang.vip)
baseName = fso.GetBaseName(file)
4 H5 \! j+ `/ \$ N& t. X5 | currentExtension = LCase(fso.GetExtensionName(file))
/ v! }, D( F' {0 b
) ?' b+ S+ q5 R1 V6 v: N5 u ' 如果当前后缀名与新后缀名不同,则进行重命名
8 r0 ~+ `4 {" T3 x- O If currentExtension <> LCase(newExtension) Then
" \" ?% X( O) N+ x3 p1 a3 Q ' 创建新的文件名
4 B& C: { f$ O. u$ b newName = baseName & "." & newExtension
: [! P* m% `! P: `5 m) R8 A
! l+ G7 K+ m" t3 v; n1 U4 F) A( _1 @ ' 检查是否已有同名文件,如果有,则处理重名9 e a1 k! D W4 B6 N2 K3 f4 b+ M(欢迎访问老王论坛:laowang.vip)
newFileName = newName
, W" u; l/ V" A$ v0 {9 l- v counter = 16 j O4 Z* W8 P2 R- B(欢迎访问老王论坛:laowang.vip)
' 确保新的文件名唯一0 C8 M4 [; w [' s. `, A(欢迎访问老王论坛:laowang.vip)
While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)6 w! E( W/ D6 g(欢迎访问老王论坛:laowang.vip)
newFileName = baseName & "(" & counter & ")." & newExtension
, i% l/ {; E' ]( @8 P counter = counter + 1$ V \; M3 g$ Y/ n/ ~0 a(欢迎访问老王论坛:laowang.vip)
Wend
" E# W& d% m- e" g9 O' Q+ p# |6 q! b$ P7 b. g4 M# V- ]0 B(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名
! m' i1 w6 g; r- B. d nameDict.Add newFileName, True4 w, u4 [$ c- A& N5 @(欢迎访问老王论坛:laowang.vip)
3 S2 Y# k' [! \- |' g ' 重命名文件( G$ U# j3 `, o5 J(欢迎访问老王论坛:laowang.vip)
file.Name = newFileName
; ^. W- v0 [( M- ]3 p; m End If
1 k) o$ ?9 h G' c/ M H; H5 Y End If
- c" U+ b: E7 f5 ?5 f; |( t1 ^4 C Next
5 P' D! t: t/ WEnd Sub
2 Y4 c* |2 b& l( t: Y2 t8 ~
( e2 b; g! U! D: r5 F/ \6 L2 N" O$ _) ~$ \1 o9 w8 r8 u$ |(欢迎访问老王论坛:laowang.vip)
2 z8 Z, @2 o" V(欢迎访问老王论坛:laowang.vip)
|