马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):/ X8 f5 F" j. ~( U3 j- i(欢迎访问老王论坛:laowang.vip)
8 B5 G5 G: j/ ^3 z! B5 u4 i(欢迎访问老王论坛:laowang.vip)
) {2 j8 {9 L6 V) a) _3 x' 修改文件后缀名.vbs" u: h( H' T. l1 I5 l! M(欢迎访问老王论坛:laowang.vip)
', `$ G( R4 b& G+ n(欢迎访问老王论坛:laowang.vip)
' 功能说明:' R: {4 P* ~3 t) q4 M- }5 {; O(欢迎访问老王论坛:laowang.vip)
' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。 : {1 H+ c# t3 ^5 @, S) X(欢迎访问老王论坛:laowang.vip)
' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。 `0 V1 D% f) X; |; h(欢迎访问老王论坛:laowang.vip)
'
6 Q& L+ x& o0 S. i2 [6 h' 使用说明:
7 {* p, j+ ]9 }! E7 b( L A' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。
! r( J4 I2 M0 T, I) X3 A' 2. 双击运行脚本或通过命令行运行。1 G! G2 n5 W) E(欢迎访问老王论坛:laowang.vip)
' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。& v. `1 v' l7 H! ](欢迎访问老王论坛:laowang.vip)
' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。, Y5 n" W) m8 s: A0 u(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。% L0 A* e+ G* G# K" J(欢迎访问老王论坛:laowang.vip)
' 6. 完成后,脚本会弹出消息框提示操作已成功完成。$ k1 }) v2 w7 V! U6 M(欢迎访问老王论坛:laowang.vip)
5 d8 m" Y# }! j7 nOption Explicit
2 n( Y) u7 V# J* }( r: ~
3 n) V5 G. S2 @- M. P' 获取当前目录的路径
8 l) K5 n" K2 l+ o, z$ gDim folderPath# f4 q$ L4 J7 ]2 H- k/ d(欢迎访问老王论坛:laowang.vip)
folderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")9 z) V" q# O& W+ n(欢迎访问老王论坛:laowang.vip)
: ^/ s$ _, N5 q" O(欢迎访问老王论坛:laowang.vip)
' 获取用户输入的新文件后缀名(不包含点)
( K% s6 O7 d& X6 _4 f6 z' P B* VDim newExtension
1 E9 S+ T$ l5 U' o6 s+ j3 `newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")$ T9 `, L7 p" P' c. J/ d- K$ a(欢迎访问老王论坛:laowang.vip)
7 D) o# t* p( k1 B) }; n3 c' 如果用户取消了输入框,则退出脚本3 T$ g; m$ e' q$ ?, t' G0 k3 r9 r(欢迎访问老王论坛:laowang.vip)
If newExtension = "" Then$ T4 S2 y+ ^% D% {% T(欢迎访问老王论坛:laowang.vip)
MsgBox "操作已取消。", vbInformation, "信息". i7 b* }- e- Y2 R4 p: z1 K. s(欢迎访问老王论坛:laowang.vip)
WScript.Quit
' b6 S _4 T5 n1 ]End If1 E1 F7 F$ e) [: x& P) S2 Z8 X& _/ w(欢迎访问老王论坛:laowang.vip)
7 \1 r( C7 O9 k0 ~2 C(欢迎访问老王论坛:laowang.vip)
' 确保新的后缀名不包含点(.)
# ?: t% M6 y9 f8 R& j, h1 Z' UIf InStr(newExtension, ".") > 0 Then7 n, H2 ^$ v6 a( j(欢迎访问老王论坛:laowang.vip)
MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"# n/ l2 M! H# w# x) s1 _(欢迎访问老王论坛:laowang.vip)
WScript.Quit
" ]" p+ K$ [. _( N, X" qEnd If
% q, D& h) J7 Q A8 ] R- x
/ t& ?! ] C6 m, S( {( K8 W6 w' 创建 FileSystemObject 对象
0 I4 `3 Q# g0 M* o1 r0 }' p4 EDim fso, folder, subFolder+ }( F6 ?* k1 P7 ](欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject")
* b* L8 U4 _7 P# o+ Z4 {# a5 F! b( u4 Q$ L6 z(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的 Folder 对象+ H0 e) z/ }5 S(欢迎访问老王论坛:laowang.vip)
Set folder = fso.GetFolder(folderPath)
2 o' H& R* Y$ d& g/ F% J9 c
% B2 ]* g+ {) l% y' Z) G) L' 检查当前目录是否包含子目录5 y0 Z5 \! ] f4 q9 L6 _+ U, R0 E(欢迎访问老王论坛:laowang.vip)
Dim hasSubFolders; a' r% D% Q$ ]) Y0 w(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 05 W9 H0 m5 X0 g. V( Q(欢迎访问老王论坛:laowang.vip)
f+ u* a1 s m* g(欢迎访问老王论坛:laowang.vip)
' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件
: E1 T, m6 Z; ?/ X8 u4 \( ADim modifySubFolders
' b9 ^, D \* m/ XIf hasSubFolders Then
# T( I5 W" d3 a( I0 b modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
0 P0 C+ D O% p# V4 L9 _End If
% h( `# M9 C6 X9 ~0 B# Q5 H! a6 ]; v2 @1 U6 S2 n(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件5 x0 t- B+ p2 I3 E k- _(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension)
" S m p7 ^! b* F6 G5 e$ R2 q8 p$ u- n0 [" W9 C(欢迎访问老王论坛:laowang.vip)
' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件4 ~% u$ H- V9 v. q/ Q) y9 z: Q(欢迎访问老王论坛:laowang.vip)
If hasSubFolders And modifySubFolders = vbYes Then" t5 \9 y3 b, M1 }, q(欢迎访问老王论坛:laowang.vip)
For Each subFolder In folder.SubFolders# z" D4 Q+ B- ]& |" d(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(subFolder, newExtension)
& y4 X g( s# z6 T. q2 a! W Next
1 [' R' T) a$ C, oEnd If4 Y& u' i0 p' u& a9 I6 K5 [% I(欢迎访问老王论坛:laowang.vip)
# y }* L& [" W3 W(欢迎访问老王论坛:laowang.vip)
' 提示用户操作完成
* S2 Q) W8 I- C3 c$ R$ e. P2 aMsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"2 v1 L- P$ C* `+ E! V(欢迎访问老王论坛:laowang.vip)
% F# m: L- p* F- D9 Q: [. v' 处理指定目录中的文件的子程序
$ T& l/ v2 d( ?' M! r# \6 P7 s6 oSub ProcessFiles(targetFolder, newExtension)! f- W, ?$ s0 N(欢迎访问老王论坛:laowang.vip)
Dim file, oldName, baseName, currentExtension, newName, newFileName, counter- O" \9 x: X* t! V' i(欢迎访问老王论坛:laowang.vip)
Dim nameDict7 c1 _9 U8 L% h p/ x4 v5 I(欢迎访问老王论坛:laowang.vip)
* f' j i0 w' ?3 [0 { ' 创建一个字典对象,用于存储当前目录内的文件名% n8 M+ p% z9 g! E5 ~# L( ](欢迎访问老王论坛:laowang.vip)
Set nameDict = CreateObject("Scripting.Dictionary")
; p; F# \" I* N, B/ d' H4 x, A. |(欢迎访问老王论坛:laowang.vip)
' 遍历指定目录下的所有文件
- N/ Z' | V4 P L9 N: @7 q& [; X" X& @ For Each file In targetFolder.Files
/ T, P5 R# s8 n% ? ' 跳过后缀名为 .vbs 的文件# h( b6 c: \+ u8 O(欢迎访问老王论坛:laowang.vip)
If LCase(fso.GetExtensionName(file)) <> "vbs" Then
% L: h- j& d6 F ' 获取文件的旧名称、基础名称和当前后缀名
0 v+ ?# f2 _& ?2 q1 o' [ oldName = file.Name+ B) J* M7 L9 ~2 u(欢迎访问老王论坛:laowang.vip)
baseName = fso.GetBaseName(file)" n1 k9 O- a; ^* E+ a( |(欢迎访问老王论坛:laowang.vip)
currentExtension = LCase(fso.GetExtensionName(file))$ `1 Z1 g8 O1 }6 a) l& z2 U* p0 C(欢迎访问老王论坛:laowang.vip)
! {1 ~7 a- }% `(欢迎访问老王论坛:laowang.vip)
' 如果当前后缀名与新后缀名不同,则进行重命名' S# m! t4 Q! W5 ~(欢迎访问老王论坛:laowang.vip)
If currentExtension <> LCase(newExtension) Then
& d: B2 R6 f' D0 D# Q ' 创建新的文件名
. K( d8 h& V2 o" O1 w- y newName = baseName & "." & newExtension
3 N+ i2 y" ~& m. Q, Z8 w Q6 a5 u3 g3 l(欢迎访问老王论坛:laowang.vip)
' 检查是否已有同名文件,如果有,则处理重名# _ J' ? g+ y# t- a2 L(欢迎访问老王论坛:laowang.vip)
newFileName = newName4 p- E! `. w7 V(欢迎访问老王论坛:laowang.vip)
counter = 1
: D9 A1 z; t& G' p* p" K ' 确保新的文件名唯一
, W, O9 N; m1 c: |9 d While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)& g9 f/ a, @% e+ G$ K( q(欢迎访问老王论坛:laowang.vip)
newFileName = baseName & "(" & counter & ")." & newExtension
8 g. E9 J6 o# L" k counter = counter + 14 |3 B- r9 A5 d( f7 X1 o7 Y5 V" ?(欢迎访问老王论坛:laowang.vip)
Wend% n" r* a: b2 I' r/ l0 y( x) x(欢迎访问老王论坛:laowang.vip)
7 H( h3 `1 {* X9 U ' 记录新的文件名0 T7 G- c5 L1 F5 h& D+ A(欢迎访问老王论坛:laowang.vip)
nameDict.Add newFileName, True
; p" T! v3 B; v9 o: J
0 y/ w( R6 }; Z- y, }" n' F" q q& D ' 重命名文件/ e* m8 X/ i" d(欢迎访问老王论坛:laowang.vip)
file.Name = newFileName0 x) i* G5 W5 [(欢迎访问老王论坛:laowang.vip)
End If) I, P6 d% D% C' @(欢迎访问老王论坛:laowang.vip)
End If% L' T- V+ x; ?) n(欢迎访问老王论坛:laowang.vip)
Next
0 y8 _3 R. d$ `1 dEnd Sub0 p$ |' @ H" u$ m7 y! ]) Q6 o(欢迎访问老王论坛:laowang.vip)
7 b9 ?+ m2 o8 {* J% h% f
9 q+ b& {* F! \- A# f2 Y( t& O- v( o( s# h) j' @+ S n# z6 Y8 R(欢迎访问老王论坛:laowang.vip)
|