马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):
& j) } G/ }* w
( e8 ~# D! d+ s3 u
" S3 B, N5 A7 o1 q' w, M. t' 修改文件后缀名.vbs4 U) H G3 Y/ ]" T2 ~1 B0 E$ w# [! n(欢迎访问老王论坛:laowang.vip)
'
) N7 a. n2 }; v' 功能说明:5 J' S p1 b1 F* v, w% m0 J(欢迎访问老王论坛:laowang.vip)
' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。
8 O4 U Q1 z9 G9 z8 b5 g% O' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。# \- |: K( ]- |(欢迎访问老王论坛:laowang.vip)
'
2 A$ }7 N4 G1 l R0 [, Q7 P5 ^- {6 T' 使用说明:
; X; P1 i% d' B0 Q' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。
~$ |& o% n9 P5 {4 E, D+ x' 2. 双击运行脚本或通过命令行运行。
; o; o3 t8 t+ I- r4 a' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。 }$ B: q8 ^$ `+ W3 p(欢迎访问老王论坛:laowang.vip)
' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。5 I& G6 x3 J$ n2 w3 U: o(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。: x5 Z8 J% d4 x6 c/ t! o! W7 q: r' B(欢迎访问老王论坛:laowang.vip)
' 6. 完成后,脚本会弹出消息框提示操作已成功完成。
- D6 r$ k- v! p# D* V- ?2 Q$ y; B5 @3 h+ P" l# w(欢迎访问老王论坛:laowang.vip)
Option Explicit
) [7 |( W' }2 |1 f( d8 T/ Z0 m" S- b9 T7 l$ f(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的路径
5 N9 y3 n% [, C! dDim folderPath, N0 ?4 t6 }" G p( |* }(欢迎访问老王论坛:laowang.vip)
folderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")0 Y5 i3 S( H- I(欢迎访问老王论坛:laowang.vip)
9 f y- Q# J. ]: h' 获取用户输入的新文件后缀名(不包含点) l6 n0 C7 `% Q. h7 N& P(欢迎访问老王论坛:laowang.vip)
Dim newExtension
% L- i+ p8 [, j& TnewExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")
; h, r/ M8 N( c/ O: {% g Z6 V1 P& ]/ F+ d2 x2 |8 T8 b/ S4 v% ~0 {/ P(欢迎访问老王论坛:laowang.vip)
' 如果用户取消了输入框,则退出脚本
) R. j4 ?% w. s( w$ y; w% TIf newExtension = "" Then
' Z3 Y2 V$ j! t. {# T MsgBox "操作已取消。", vbInformation, "信息"6 ?2 m; q* d9 H6 _% p; t2 {9 {) B(欢迎访问老王论坛:laowang.vip)
WScript.Quit
7 A/ G" G- k9 {. f5 r/ z& SEnd If
( b. ^; r: j4 a- X$ h9 s; g# S7 @3 a q; i* t; c# r(欢迎访问老王论坛:laowang.vip)
' 确保新的后缀名不包含点(.)
1 i7 |$ W+ h8 a* x0 i' uIf InStr(newExtension, ".") > 0 Then
2 P6 n$ N6 c+ @, A3 U5 o2 | MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"7 U( Y# F @- w6 e7 {+ Z(欢迎访问老王论坛:laowang.vip)
WScript.Quit2 ~+ r0 k+ e. B/ i& [(欢迎访问老王论坛:laowang.vip)
End If
& \1 q' O6 N: Z+ w; K4 I! N S+ }& ]3 K" Q9 G1 D(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象
0 {% }2 K' S" x# S( ~# ]Dim fso, folder, subFolder1 \5 e6 v, }1 C- n- U$ }(欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject")
: M- J9 A/ X+ v1 |7 t3 \/ B+ N7 B' ]9 k) M8 \(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的 Folder 对象, ?% |- A( Y }5 l2 w; R/ w* E(欢迎访问老王论坛:laowang.vip)
Set folder = fso.GetFolder(folderPath)8 A6 I' J9 f/ V, N# ?4 @5 w(欢迎访问老王论坛:laowang.vip)
! o& B" J X5 W$ [' 检查当前目录是否包含子目录
: e& P" S+ o8 }" Q! n: XDim hasSubFolders* i( v D/ k+ N$ z r: k5 A(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 0
/ i% o) A. D3 [. F* ]2 v3 m3 E' U+ f! p# ~7 R' p( `(欢迎访问老王论坛:laowang.vip)
' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件8 R# ~1 H0 G# Y(欢迎访问老王论坛:laowang.vip)
Dim modifySubFolders
" }0 K+ ] X& r1 k. c* y) X" GIf hasSubFolders Then
) ~9 `" y5 q4 p- t modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
- C1 {/ | j4 I) Q1 g: PEnd If% u" F4 O {! R6 f6 E! S5 O(欢迎访问老王论坛:laowang.vip)
0 F3 U. J$ g1 ?' \% o(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件7 d% l5 s6 ^/ o(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension)
' h6 @" Y2 G0 N" x
4 R& S( i( U' L" }5 }! g- q1 `/ c' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件
: b- y" e' _7 u: s# z# yIf hasSubFolders And modifySubFolders = vbYes Then- i8 d3 A& F- e/ m! R(欢迎访问老王论坛:laowang.vip)
For Each subFolder In folder.SubFolders6 O' r8 y7 f) O/ o- e0 b' Z8 H(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(subFolder, newExtension)2 z6 D- u% [+ k: i' i(欢迎访问老王论坛:laowang.vip)
Next
# T8 O3 s! Z1 G6 n5 t0 ?, E) ^End If k4 ~" l/ h+ _) C: b% _8 \% ^(欢迎访问老王论坛:laowang.vip)
s6 ]" @$ Z! S# M2 j' 提示用户操作完成/ ~1 ?5 [' }' W7 d2 p* G: F(欢迎访问老王论坛:laowang.vip)
MsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"
( H. i+ ?" x" R3 N
9 O5 B0 B0 e% p7 v' t6 x9 o+ i) z' 处理指定目录中的文件的子程序2 c4 K" L: H, X6 Z( Y(欢迎访问老王论坛:laowang.vip)
Sub ProcessFiles(targetFolder, newExtension)
! K# ~, n5 G; T/ D+ {7 A, j Dim file, oldName, baseName, currentExtension, newName, newFileName, counter8 X: w1 e# F$ B; \(欢迎访问老王论坛:laowang.vip)
Dim nameDict1 Q6 v3 ? M+ y- o' E(欢迎访问老王论坛:laowang.vip)
( @6 {" m2 c$ Q0 b+ v+ K* A1 v; R ' 创建一个字典对象,用于存储当前目录内的文件名5 q! W5 W- u' }. G& H(欢迎访问老王论坛:laowang.vip)
Set nameDict = CreateObject("Scripting.Dictionary")
8 l/ |6 [: Z$ y! F+ I1 [$ ^) Q; r) h2 S+ q% O; F$ [4 i+ Z4 H/ F(欢迎访问老王论坛:laowang.vip)
' 遍历指定目录下的所有文件; t% s0 A( k0 u3 H* _(欢迎访问老王论坛:laowang.vip)
For Each file In targetFolder.Files1 W$ B$ i% `# ~ |% Q( Q(欢迎访问老王论坛:laowang.vip)
' 跳过后缀名为 .vbs 的文件. W" y1 U$ a& E/ s& X(欢迎访问老王论坛:laowang.vip)
If LCase(fso.GetExtensionName(file)) <> "vbs" Then
4 s# t# }. Z# r+ k, p) Z: u ' 获取文件的旧名称、基础名称和当前后缀名( X- F( u" r0 @' G# q: T(欢迎访问老王论坛:laowang.vip)
oldName = file.Name
2 F0 f8 o7 ~. j baseName = fso.GetBaseName(file)
" {/ A5 Z; ], G currentExtension = LCase(fso.GetExtensionName(file))# ]2 H: i7 C. N# E2 y. X% Q9 @! k(欢迎访问老王论坛:laowang.vip)
R" { E- H' W$ P4 ]# t ' 如果当前后缀名与新后缀名不同,则进行重命名
6 |) s+ U% g9 }1 H; g If currentExtension <> LCase(newExtension) Then! [) N7 p& b. d8 i4 Z(欢迎访问老王论坛:laowang.vip)
' 创建新的文件名/ v) b: M3 z7 v- g+ v(欢迎访问老王论坛:laowang.vip)
newName = baseName & "." & newExtension
" V" K; {6 H6 s5 r4 r. b- ~* r1 [0 w9 g(欢迎访问老王论坛:laowang.vip)
' 检查是否已有同名文件,如果有,则处理重名( Q+ M) q+ y+ B: U. N(欢迎访问老王论坛:laowang.vip)
newFileName = newName
8 ?6 g5 x3 M) {7 G counter = 11 q5 V9 o, ]# i5 S& g8 Z3 F(欢迎访问老王论坛:laowang.vip)
' 确保新的文件名唯一
0 }9 v8 f1 V- `' k7 y6 k7 Z While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)% T. P" k' }4 ]8 J0 }" |* W(欢迎访问老王论坛:laowang.vip)
newFileName = baseName & "(" & counter & ")." & newExtension, T$ @' M5 q! T% D, s! |(欢迎访问老王论坛:laowang.vip)
counter = counter + 1
/ o/ l2 T( F- ~: ^ Wend
0 a% }) H* r3 G) n5 t, V) n3 R0 U& q/ V) y: G(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名 M+ T5 O* P3 w6 p(欢迎访问老王论坛:laowang.vip)
nameDict.Add newFileName, True$ h% E& @- g1 ~$ F) a! I(欢迎访问老王论坛:laowang.vip)
% f& w* a0 l3 l# E ' 重命名文件
/ i' Q( R0 @0 Q, |4 n6 ]( ]" [ file.Name = newFileName
+ g. P9 {" r2 P: m1 w& H End If
$ Q9 T" t" a- ` L* o# G End If
6 d7 i: w$ q3 q& g& Q ?' Y" [ Next# e* ]9 K( N: C( K(欢迎访问老王论坛:laowang.vip)
End Sub
$ v9 ^0 p/ [0 |
" }0 n: y/ s2 |) q6 @' ?2 M4 k Y" Q- d/ G1 a8 n& e8 n(欢迎访问老王论坛:laowang.vip)
% n m$ g; u9 T5 ^9 e2 b& G |