马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):
7 f( k* ^1 {! v" ^( E, }
I- [3 ~6 z5 _9 x
4 u5 ?2 k4 _4 Y: p4 _' 修改文件后缀名.vbs9 D7 r, c, W! O* i(欢迎访问老王论坛:laowang.vip)
'
! E6 k5 Q( ]: C2 K. \3 {' 功能说明:
' z7 o# \" t: m9 [( _* G8 \1 `8 E' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。
* L4 u, J, e5 L1 O! {' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。" |9 v, O9 c6 D4 E2 U(欢迎访问老王论坛:laowang.vip)
'
- |* \3 m+ R: L2 K; n6 t- o' 使用说明:; j6 S6 F0 z+ A) P* [/ g1 [(欢迎访问老王论坛:laowang.vip)
' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。
' ~& c* `" B+ n; X6 b6 p) y' 2. 双击运行脚本或通过命令行运行。5 h" ~% p- n1 f7 ?(欢迎访问老王论坛:laowang.vip)
' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。7 ]/ t& T/ B. `9 N( N/ U+ A0 r: x(欢迎访问老王论坛:laowang.vip)
' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。) W, O; c; x. S# g(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。
- A' T5 b+ m; c M' 6. 完成后,脚本会弹出消息框提示操作已成功完成。
6 ?' e6 F& \. L8 a0 D
, i' B, ?; c+ V: B" {! WOption Explicit- d) H9 P+ g7 ~8 u$ L1 t( ?(欢迎访问老王论坛:laowang.vip)
c: A0 N6 t" C: p) j' 获取当前目录的路径
- ^& t; s5 v1 Q2 {* ADim folderPath
( R9 B7 p- J* H3 y: Z% x8 YfolderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")$ ]# d* m! p! D: x8 y* f(欢迎访问老王论坛:laowang.vip)
" ~5 e L6 i* S1 l( r3 ](欢迎访问老王论坛:laowang.vip)
' 获取用户输入的新文件后缀名(不包含点)8 m3 I. P5 H5 v(欢迎访问老王论坛:laowang.vip)
Dim newExtension' f4 E* I1 w1 F(欢迎访问老王论坛:laowang.vip)
newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")
8 n/ ^3 @3 A, F, t6 L7 V
! H9 B% F- b% w6 b* _' 如果用户取消了输入框,则退出脚本: {+ S% J( W; |( B7 f P(欢迎访问老王论坛:laowang.vip)
If newExtension = "" Then
1 ?( g. u2 d6 ~+ d5 D7 l MsgBox "操作已取消。", vbInformation, "信息"
3 C8 e! p; x/ `. _: O0 l3 {4 B S WScript.Quit3 {' b8 c4 @2 i/ z8 Q& U3 c- H7 Q(欢迎访问老王论坛:laowang.vip)
End If
: z8 _2 s( @' z. a+ s- b% P- h+ V/ ?4 M V1 } G1 A2 c(欢迎访问老王论坛:laowang.vip)
' 确保新的后缀名不包含点(.)
! p6 M' L2 E! u9 C: p' i0 X# EIf InStr(newExtension, ".") > 0 Then
~" a& d5 d! G MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误". q( n: R1 g8 L, T; e% h(欢迎访问老王论坛:laowang.vip)
WScript.Quit
, }# e' |! E; V4 B# F" r1 \0 q5 X; |End If( Y i6 a" |. f/ F: `9 L* R(欢迎访问老王论坛:laowang.vip)
7 ^$ O# D( r* z [& x(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象
9 g( j' U! I Z; R) w6 pDim fso, folder, subFolder) {0 C( M9 G, `, Q; t' N(欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject")
7 h) o" z; g5 D* Y& u3 A
! z5 S8 ]5 R! H( k/ ]8 S' 获取当前目录的 Folder 对象
7 B1 o) Z# s' h k- KSet folder = fso.GetFolder(folderPath); A/ I; L' {: F. `' k6 [$ M(欢迎访问老王论坛:laowang.vip)
% n8 L! J& B9 I: z! t/ i: l( y' 检查当前目录是否包含子目录7 w1 U1 w9 [9 p8 Q, }" @( a(欢迎访问老王论坛:laowang.vip)
Dim hasSubFolders4 ?- ?1 w% Y1 t(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 0
. R) j. q! h7 g* U! T
% g& M* H# U$ u! E; X. P1 m% @0 _/ ]- g' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件
: {3 l$ ]3 A7 pDim modifySubFolders
% R A+ ^ y2 t* lIf hasSubFolders Then+ x* X0 ?* h: b: M(欢迎访问老王论坛:laowang.vip)
modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
" I7 Y% K# u9 i3 i1 IEnd If, e6 d' a$ M2 Q0 x, n(欢迎访问老王论坛:laowang.vip)
5 f/ e" ]$ g' V+ G(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件. W% X J/ t, }(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension)) P% E8 G2 G* v3 E3 H v+ [(欢迎访问老王论坛:laowang.vip)
2 a2 M9 N1 c+ O) G(欢迎访问老王论坛:laowang.vip)
' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件
& Y8 z7 M8 _" c4 [: NIf hasSubFolders And modifySubFolders = vbYes Then
3 }7 C, s% Y( B! Q3 \* ~ For Each subFolder In folder.SubFolders: t" L' `' p9 n0 c1 B(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(subFolder, newExtension)
% d2 k- ?3 R) i Next
* ^" e' M6 q* t% V; PEnd If' o. x3 |2 V8 I8 V# \/ D+ y& _(欢迎访问老王论坛:laowang.vip)
' u A1 L& e C) U2 B- O' e! ~(欢迎访问老王论坛:laowang.vip)
' 提示用户操作完成
" X* h; l3 [- L y6 o$ YMsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"1 D! z. j D) `' s6 g0 V! a(欢迎访问老王论坛:laowang.vip)
3 W( v1 A0 m4 `' 处理指定目录中的文件的子程序
' S5 w5 T8 N) A5 o, E) _3 ~# l' rSub ProcessFiles(targetFolder, newExtension)0 n, D* q* n f* i0 ~" x& |6 i) {(欢迎访问老王论坛:laowang.vip)
Dim file, oldName, baseName, currentExtension, newName, newFileName, counter9 q9 u# R r# }: ^4 b0 r(欢迎访问老王论坛:laowang.vip)
Dim nameDict
8 t3 E# K# ^$ i& {" }" Q7 X7 o7 D# X# D$ j& o6 {; u( X9 v(欢迎访问老王论坛:laowang.vip)
' 创建一个字典对象,用于存储当前目录内的文件名$ q9 M U, a8 r5 I7 [: \8 f' z- C(欢迎访问老王论坛:laowang.vip)
Set nameDict = CreateObject("Scripting.Dictionary") s$ ?- l: P" x: l9 O/ C(欢迎访问老王论坛:laowang.vip)
) t5 ~( c. b% n: d+ S8 R" a7 l2 t(欢迎访问老王论坛:laowang.vip)
' 遍历指定目录下的所有文件
& C1 m" c, _+ ]0 j For Each file In targetFolder.Files
- ~$ {" k+ V, z! G4 w! ` ' 跳过后缀名为 .vbs 的文件
; T& i- J+ {4 d/ a5 Q3 M+ x) W) w If LCase(fso.GetExtensionName(file)) <> "vbs" Then
- p% S% y9 V( s! { ' 获取文件的旧名称、基础名称和当前后缀名 p" D+ a ?: u/ a5 J! y( t+ ?4 W(欢迎访问老王论坛:laowang.vip)
oldName = file.Name
, D9 B8 g5 ]+ ]) z( n1 N- ^ baseName = fso.GetBaseName(file)
! r p7 }3 B D ?! |! A currentExtension = LCase(fso.GetExtensionName(file))
6 C/ I$ D% X. l$ x& i% y# P. q' T
* z) |: ~9 t- g' x ' 如果当前后缀名与新后缀名不同,则进行重命名6 v" C6 \; u$ L! c3 ]9 |(欢迎访问老王论坛:laowang.vip)
If currentExtension <> LCase(newExtension) Then9 J1 U0 f! d, r$ J9 A) ]2 Y3 Q(欢迎访问老王论坛:laowang.vip)
' 创建新的文件名
8 f F l; M `1 C1 [ newName = baseName & "." & newExtension8 R# O, a9 ^) x6 l+ D: s(欢迎访问老王论坛:laowang.vip)
/ T$ o4 o# ~! R4 @1 X1 n% B2 Z ' 检查是否已有同名文件,如果有,则处理重名5 R) S9 d* @, {. [$ n: D(欢迎访问老王论坛:laowang.vip)
newFileName = newName2 k3 k) E' T B8 h) q) ]4 f N% R(欢迎访问老王论坛:laowang.vip)
counter = 1
$ _* N. Q7 r9 ] t ' 确保新的文件名唯一. B8 c( N; z9 r* r; v% Z(欢迎访问老王论坛:laowang.vip)
While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)
2 r- J6 M$ Z( V" ?3 | newFileName = baseName & "(" & counter & ")." & newExtension0 Y. `& a; b( H3 R9 z. a(欢迎访问老王论坛:laowang.vip)
counter = counter + 1
# B& A1 {" [6 M/ B" d Wend: T2 ]5 F& a0 Z# b3 R8 v5 s- E# Q(欢迎访问老王论坛:laowang.vip)
, Z* ?6 o' I1 L$ w2 _6 P(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名
4 U' J0 z3 l, j( [ nameDict.Add newFileName, True
1 @# x" N; B: q6 D! U6 L& A N8 \6 \% e$ |% R(欢迎访问老王论坛:laowang.vip)
' 重命名文件
& n: N$ a, N+ P0 ^) B8 j4 Y file.Name = newFileName
6 x7 Q4 \1 F1 u! ? End If2 h0 A+ n; I% S% o$ S(欢迎访问老王论坛:laowang.vip)
End If- h4 r* B0 s' X3 P(欢迎访问老王论坛:laowang.vip)
Next
' J. ~2 e1 N( ?3 GEnd Sub
9 d7 l4 n3 O S$ y. |/ Y4 s" O(欢迎访问老王论坛:laowang.vip)
# h8 } Q3 u: G* U! f! @- W/ f8 J5 i+ F(欢迎访问老王论坛:laowang.vip)
|