马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):
# R& C7 d+ L. \ M3 {1 S; t+ @' d4 `- n, m. X(欢迎访问老王论坛:laowang.vip)
) D/ n8 a F# `9 ^+ Q' 修改文件后缀名.vbs
8 a$ Y+ F7 A% C. v; t: ~'0 T7 Q5 h5 Q' T0 j# E& j(欢迎访问老王论坛:laowang.vip)
' 功能说明:
' A6 J; s9 g, t, B' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。
+ c& W9 U0 M) x8 C8 K1 ^' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。& U6 c! t( z# w1 d+ l(欢迎访问老王论坛:laowang.vip)
'% @! g9 o4 h0 `: f(欢迎访问老王论坛:laowang.vip)
' 使用说明:) U7 e8 z3 f* F; S; k" j- {7 `(欢迎访问老王论坛:laowang.vip)
' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。
0 i2 `! j1 m1 P* F' 2. 双击运行脚本或通过命令行运行。& p" x& l8 F2 k(欢迎访问老王论坛:laowang.vip)
' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。
; K2 M3 c- M7 E, b$ t+ J' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。
6 i0 ^7 C1 J$ D4 l- m: c5 u! w' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。
! W& E- Y4 W3 Q0 P7 b8 W' 6. 完成后,脚本会弹出消息框提示操作已成功完成。
" W+ W5 p4 r' h$ ^, L9 `
6 L% F) f- l8 k( z: @6 _: d5 i* L1 ~Option Explicit
, q( V: C) ]( k' h' A1 k. y5 |! c. ?' u
7 i2 y% ^, \' X; E7 I' ?0 X. _' 获取当前目录的路径
0 K, k7 A+ L' NDim folderPath
% |$ x( ~8 }( G4 m* bfolderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")) H; N1 m: t7 @ z) C9 j! M8 X(欢迎访问老王论坛:laowang.vip)
$ ]+ |0 E6 T* K/ b! t$ g(欢迎访问老王论坛:laowang.vip)
' 获取用户输入的新文件后缀名(不包含点)- `" @2 e+ R4 B4 z ?* ~3 Q(欢迎访问老王论坛:laowang.vip)
Dim newExtension( y c7 z+ x, Z) r' k(欢迎访问老王论坛:laowang.vip)
newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")
" G# V9 v) Q/ F% p9 K8 b# T) w* \' p9 C" x(欢迎访问老王论坛:laowang.vip)
' 如果用户取消了输入框,则退出脚本
2 ]; \" K$ Q- F" n! oIf newExtension = "" Then
# F0 d$ n, H$ ^9 g! N" e: R MsgBox "操作已取消。", vbInformation, "信息"
+ |" M! Z: F& a+ X" u WScript.Quit
; p/ T' x1 b6 K% F0 V7 c- iEnd If$ t% s }' t% N; ] ?% g3 j(欢迎访问老王论坛:laowang.vip)
7 b( a' V8 |4 Z/ P. p' 确保新的后缀名不包含点(.). \6 P! N! D' F& K(欢迎访问老王论坛:laowang.vip)
If InStr(newExtension, ".") > 0 Then
- o' {* T8 j2 Z* }; k MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"
* J5 p4 V( b3 t% k, R WScript.Quit
/ a/ z# B; r7 _* kEnd If7 `7 S$ V+ ^% U( G(欢迎访问老王论坛:laowang.vip)
" Q+ u6 Y: C& Z7 R. J' 创建 FileSystemObject 对象( j8 c; w7 q. B) I4 q: v(欢迎访问老王论坛:laowang.vip)
Dim fso, folder, subFolder. @& O, ^5 v8 L/ S: @. _(欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject")2 X4 D S/ h/ l& j: y0 \# y8 Q+ |(欢迎访问老王论坛:laowang.vip)
" a3 T3 y: y! X" \& {& ]% J2 C! x(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的 Folder 对象& F0 m$ z. v+ b+ L" G5 S1 M( |/ R8 }, h0 ?(欢迎访问老王论坛:laowang.vip)
Set folder = fso.GetFolder(folderPath)
8 H: S! i- g2 f' T( Y
8 Y0 X% }6 c" S% K' 检查当前目录是否包含子目录9 |9 j4 p$ w" U. S. n(欢迎访问老王论坛:laowang.vip)
Dim hasSubFolders
% b: K! u; {. I7 ^hasSubFolders = folder.SubFolders.Count > 0
" V3 z4 A7 T; V- S! W. G! g& d( n0 |+ c2 X7 V! o. y(欢迎访问老王论坛:laowang.vip)
' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件3 O3 {! g7 q3 R(欢迎访问老王论坛:laowang.vip)
Dim modifySubFolders
* ]3 r5 U. X" S& D$ n+ u% A+ [. TIf hasSubFolders Then
: n/ v9 l* y$ ]8 w+ p0 x1 n+ Q2 R modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
5 @7 u0 _# r) C: [+ W) qEnd If
4 z* ^7 j" C2 }( [7 W5 m% }0 `! X1 X(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件! \% O- ~: u1 r0 o(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension)
+ b7 K; O8 v6 N M2 W# U+ s' \) {& Q0 k0 B% b' P Z(欢迎访问老王论坛:laowang.vip)
' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件 m' N% |1 _4 v% r& `(欢迎访问老王论坛:laowang.vip)
If hasSubFolders And modifySubFolders = vbYes Then# j/ l, n+ R0 @9 R" t$ X7 {(欢迎访问老王论坛:laowang.vip)
For Each subFolder In folder.SubFolders) m T5 e$ Z: h/ p" o(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(subFolder, newExtension); c5 e) Q3 x) T' C( L- ?(欢迎访问老王论坛:laowang.vip)
Next
8 @' i6 K; w0 z2 N n, T! M4 ]7 ?End If* R: q9 V2 \6 J0 [3 f( u(欢迎访问老王论坛:laowang.vip)
4 O; L* T" |- C& o8 x' n8 J1 k( l' 提示用户操作完成) K4 F6 F1 e8 @3 \- Q, c2 _5 @- h(欢迎访问老王论坛:laowang.vip)
MsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"
) k$ ]2 \. z! w8 H# A' u, W" f, P" Q' y6 O+ G# k(欢迎访问老王论坛:laowang.vip)
' 处理指定目录中的文件的子程序
% t& `: n2 p+ l4 ZSub ProcessFiles(targetFolder, newExtension)
2 A% c @( ]5 V2 k8 S Dim file, oldName, baseName, currentExtension, newName, newFileName, counter) i( p2 K" H* z(欢迎访问老王论坛:laowang.vip)
Dim nameDict
/ K. {- a. o3 X' A/ ]: N3 g8 O
) J! G% q9 F3 R( r ' 创建一个字典对象,用于存储当前目录内的文件名
; S: C4 L" Q) h$ S5 W% L Set nameDict = CreateObject("Scripting.Dictionary")& y, o3 Q2 F' j+ a& E/ F(欢迎访问老王论坛:laowang.vip)
0 u# S% X% Y' u, Y7 ^; u ' 遍历指定目录下的所有文件. ^' @6 N3 g" L0 ]! ]% d# ~(欢迎访问老王论坛:laowang.vip)
For Each file In targetFolder.Files, S; G( c# q2 @7 j1 |1 g/ O(欢迎访问老王论坛:laowang.vip)
' 跳过后缀名为 .vbs 的文件
4 z5 A1 p: C) o9 m! ` If LCase(fso.GetExtensionName(file)) <> "vbs" Then/ o2 U9 ]2 J" U* H8 P4 o( C(欢迎访问老王论坛:laowang.vip)
' 获取文件的旧名称、基础名称和当前后缀名" }: `4 v/ U! B) B(欢迎访问老王论坛:laowang.vip)
oldName = file.Name. G" v9 x! ^7 V(欢迎访问老王论坛:laowang.vip)
baseName = fso.GetBaseName(file)2 g0 W4 m, k+ M7 s(欢迎访问老王论坛:laowang.vip)
currentExtension = LCase(fso.GetExtensionName(file))
7 k; P5 |$ b! A- J
5 f- W& X6 M0 C( \ ' 如果当前后缀名与新后缀名不同,则进行重命名
; {) K' w4 x; q2 }/ L, }( R( G If currentExtension <> LCase(newExtension) Then( Q, E3 Q# B& H0 c3 x7 q' ~(欢迎访问老王论坛:laowang.vip)
' 创建新的文件名! m0 T; g' }- Q3 h( r(欢迎访问老王论坛:laowang.vip)
newName = baseName & "." & newExtension
( M5 } }4 q* {# ]0 r- D R ~" o. t
. ?% X2 F. E) {9 W a0 l" p ' 检查是否已有同名文件,如果有,则处理重名
) U9 }7 E# z" t8 E0 O% } newFileName = newName$ ^$ u( b) L% p9 e(欢迎访问老王论坛:laowang.vip)
counter = 1; u! ^, X# z% S$ O# T' p8 ?% U(欢迎访问老王论坛:laowang.vip)
' 确保新的文件名唯一3 C& G# o8 h: Y- l) L(欢迎访问老王论坛:laowang.vip)
While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)" J7 H6 f F) b& \% z(欢迎访问老王论坛:laowang.vip)
newFileName = baseName & "(" & counter & ")." & newExtension
) K8 f8 R M0 W! j5 z7 Y) W counter = counter + 17 B2 i" }( T. Q" W(欢迎访问老王论坛:laowang.vip)
Wend/ [ M% |8 ?/ X2 ]7 _(欢迎访问老王论坛:laowang.vip)
' ]7 @; m) ]* e. [ N6 [* g& t(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名9 m& j0 h% s. S" Y4 z& I1 H(欢迎访问老王论坛:laowang.vip)
nameDict.Add newFileName, True7 ^( z2 l) \" R(欢迎访问老王论坛:laowang.vip)
6 R/ b; V6 ?4 L" s4 M3 A5 D(欢迎访问老王论坛:laowang.vip)
' 重命名文件* N ]8 U+ a) z0 D(欢迎访问老王论坛:laowang.vip)
file.Name = newFileName
: t7 T& H/ C. w End If
' q2 f: f, B1 q' C( V End If
8 D' q% z& G/ A {& O: \, b Next
7 w) n' E% {5 K% L% \6 b; x% lEnd Sub+ H) p- c& F8 M5 w(欢迎访问老王论坛:laowang.vip)
! B! w' @* e" _4 M(欢迎访问老王论坛:laowang.vip)
/ g! z, C( y% C6 v' Z! K1 o& t* t h; u(欢迎访问老王论坛:laowang.vip)
|