马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):
6 Y1 ?8 t' s+ R* B* o v# u
# c' W( R# D" Y. ~3 u% i& y! {: ~9 M; ?(欢迎访问老王论坛:laowang.vip)
' 修改文件后缀名.vbs
: i8 F3 d1 m4 J' c/ A7 ]'
2 |/ ?+ x* A5 R, L3 A0 E: ]/ O' 功能说明:
: m8 ]/ n3 B+ I+ C. A' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。 9 \: p! |# P3 K! R$ H: h# D(欢迎访问老王论坛:laowang.vip)
' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。
4 t H8 }) V, y* T/ d' p'
0 F0 a. H% k1 s5 M; k% q' 使用说明:: s+ o' T) N3 F6 z- U7 c! x( K(欢迎访问老王论坛:laowang.vip)
' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。
1 H. i3 l8 X3 E. ^, f' 2. 双击运行脚本或通过命令行运行。
3 a7 y' r( Q, M; S4 b G2 c h' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。, @8 e+ r/ J% F2 s B; Y+ p! i(欢迎访问老王论坛:laowang.vip)
' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。% q8 I7 e8 b+ j* n- M7 ~/ c8 Z(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。
Z0 [* _0 @ W# {+ \2 k# o' 6. 完成后,脚本会弹出消息框提示操作已成功完成。
3 x( ?' p9 p. u3 Q( D- u) Q2 J8 t& ^; x(欢迎访问老王论坛:laowang.vip)
Option Explicit
+ z& B4 N7 [7 @# Z1 g- k& ^
: D, M1 S/ `' U* P* ` j' 获取当前目录的路径" p5 M8 I& s! @- I(欢迎访问老王论坛:laowang.vip)
Dim folderPath
4 ?6 j A. N5 z& h) dfolderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")2 b. s4 T8 s, I6 @4 N% e(欢迎访问老王论坛:laowang.vip)
1 Y9 g5 }; {+ U- D(欢迎访问老王论坛:laowang.vip)
' 获取用户输入的新文件后缀名(不包含点)
& K$ j9 k/ [4 }9 R% T* N/ B$ }1 `Dim newExtension
/ d+ q3 f! O8 \newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")
- @: v0 _" g& H; T6 ]8 c/ b+ |0 r; A3 g4 z! I& ?(欢迎访问老王论坛:laowang.vip)
' 如果用户取消了输入框,则退出脚本! z3 V |1 S- z% j4 ?) U- v( a- j% d(欢迎访问老王论坛:laowang.vip)
If newExtension = "" Then
( e1 U1 O9 T6 B9 ? MsgBox "操作已取消。", vbInformation, "信息"
5 e3 B0 Z/ F! E1 |" X5 A WScript.Quit
O3 a$ V, y9 n% M8 _End If; n+ D" h! {& ^. e7 q(欢迎访问老王论坛:laowang.vip)
# V! Z. R8 F. q4 R# ~. h0 b7 |( K' 确保新的后缀名不包含点(.)1 t$ b/ _! B# d9 O7 B* N, P1 E(欢迎访问老王论坛:laowang.vip)
If InStr(newExtension, ".") > 0 Then
j/ Z" E7 {1 J1 y6 k. o MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"
7 {* I# q$ X8 F! i WScript.Quit
; G+ o" H& J6 X6 r4 nEnd If
h- G6 m0 h4 U+ G# A& C
( @* d, H" Z" g' 创建 FileSystemObject 对象
9 T8 P# O' x- wDim fso, folder, subFolder' y6 q9 B/ m2 Q/ ^3 }(欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject")
+ H/ q' ^( I% ?$ L5 O6 k9 ^4 O4 A
+ l' a1 m1 @* i1 M1 \7 i' 获取当前目录的 Folder 对象
/ p8 J0 _, n. I' LSet folder = fso.GetFolder(folderPath)* N- H* o, L0 o' y ?3 v(欢迎访问老王论坛:laowang.vip)
2 R$ h. Y- t& m' O( g R: L(欢迎访问老王论坛:laowang.vip)
' 检查当前目录是否包含子目录, z+ R3 V3 \! W; _0 _(欢迎访问老王论坛:laowang.vip)
Dim hasSubFolders; |8 T4 c7 ~. O5 Q4 p7 w( y(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 0
% G. }8 J. q; j0 Q0 Q" I. y
- Q2 |+ c7 N7 f3 B( c5 x3 T' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件
* R4 y9 O9 b4 O1 c7 {- CDim modifySubFolders
1 R, u4 L0 t: @& D4 E/ K( AIf hasSubFolders Then
1 I7 @% ^. V. a/ S' b) g% u modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
" F9 @# S$ Z8 LEnd If
% d, P9 v1 Y9 `* {& M
+ I+ I! q2 z3 i' f) o' 处理当前目录中的所有文件' ?+ {/ I3 v* Y' ~! e. |0 f3 r(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension)' \2 G$ |3 h* g9 P9 [4 x! _(欢迎访问老王论坛:laowang.vip)
8 G4 |- y; E/ L% p6 S0 e( \& @(欢迎访问老王论坛:laowang.vip)
' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件, x7 \3 d( ?# _) s- z7 X- F(欢迎访问老王论坛:laowang.vip)
If hasSubFolders And modifySubFolders = vbYes Then
% m5 e y5 v1 O' e0 A/ l0 Q For Each subFolder In folder.SubFolders
( k* h4 K! x) U. @& B Call ProcessFiles(subFolder, newExtension)
, Z) A% u: m* K/ ?8 I% y1 T1 M Next
2 H, A4 O; I& w# T# A1 U) pEnd If$ r3 `6 s* ~" D$ b9 a(欢迎访问老王论坛:laowang.vip)
. g, w( k# c8 J0 |' y* r8 [(欢迎访问老王论坛:laowang.vip)
' 提示用户操作完成
1 [" ]" v% q8 M, D0 OMsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"
- ~) ~0 W3 f2 ]' a7 S
3 O" Z3 q5 U' A' 处理指定目录中的文件的子程序! ~3 X; j- c1 d+ u4 {3 V(欢迎访问老王论坛:laowang.vip)
Sub ProcessFiles(targetFolder, newExtension)
; d4 b0 x: |8 W: A$ D Dim file, oldName, baseName, currentExtension, newName, newFileName, counter
# A. D/ S$ |$ O; Z% W* r0 P Dim nameDict: u- Q7 G8 z( N+ H(欢迎访问老王论坛:laowang.vip)
8 B" `) F; z! A2 o! w1 T% o ' 创建一个字典对象,用于存储当前目录内的文件名$ f( u) {' {9 A0 W9 O(欢迎访问老王论坛:laowang.vip)
Set nameDict = CreateObject("Scripting.Dictionary")" G$ @0 [: [8 H$ b5 X4 q% C6 q(欢迎访问老王论坛:laowang.vip)
# a* J( y; T/ ~" s ' 遍历指定目录下的所有文件
) U( a- s! o$ _9 o8 b For Each file In targetFolder.Files2 A# W% }8 s/ g( @; t* @" e( S5 \6 |4 [(欢迎访问老王论坛:laowang.vip)
' 跳过后缀名为 .vbs 的文件
' ~1 x! G# {! L3 W+ g9 r& e8 p$ U If LCase(fso.GetExtensionName(file)) <> "vbs" Then( J$ J& \1 _! A3 [% m2 I. g8 R(欢迎访问老王论坛:laowang.vip)
' 获取文件的旧名称、基础名称和当前后缀名- Q) z8 U4 K' t2 @# o. ^3 o(欢迎访问老王论坛:laowang.vip)
oldName = file.Name
4 K! w! a- D. i O" p8 l. ? baseName = fso.GetBaseName(file)
+ |, R- E& Z' ^ currentExtension = LCase(fso.GetExtensionName(file))
7 }8 h3 E+ p& \3 N7 M7 u x# S; g* H: y3 Y(欢迎访问老王论坛:laowang.vip)
' 如果当前后缀名与新后缀名不同,则进行重命名" r3 b& z4 ^0 \5 I4 P2 s(欢迎访问老王论坛:laowang.vip)
If currentExtension <> LCase(newExtension) Then8 M) n: ]5 P" X7 d" g" `(欢迎访问老王论坛:laowang.vip)
' 创建新的文件名+ p# C P/ p- }, Y8 `( y2 x(欢迎访问老王论坛:laowang.vip)
newName = baseName & "." & newExtension0 O- \! E+ L3 I, Q" h! C(欢迎访问老王论坛:laowang.vip)
8 p5 s9 ~% Y7 ~2 a5 A1 |! c2 v) Q(欢迎访问老王论坛:laowang.vip)
' 检查是否已有同名文件,如果有,则处理重名2 Q- S; I* P+ _- Y6 F3 S/ |(欢迎访问老王论坛:laowang.vip)
newFileName = newName6 s B3 q: G6 P' @4 a% U [(欢迎访问老王论坛:laowang.vip)
counter = 1! m5 L/ E* n% v. u) d(欢迎访问老王论坛:laowang.vip)
' 确保新的文件名唯一4 g. T- _3 O* p* E* o* B6 Q(欢迎访问老王论坛:laowang.vip)
While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)- n8 E+ F0 g9 W7 r. h(欢迎访问老王论坛:laowang.vip)
newFileName = baseName & "(" & counter & ")." & newExtension
6 g' \! i5 O% r4 a8 Q8 Z counter = counter + 1
7 ]& P# x/ o$ W8 S% v- C Wend# d: a$ D4 _: a, V _(欢迎访问老王论坛:laowang.vip)
; S/ x0 w8 m E( w ' 记录新的文件名
, [% k" T# }" z; i& C4 X nameDict.Add newFileName, True
6 o4 L3 E: f& c5 _! ]% T8 H+ g. E X, g& B" l3 q+ y(欢迎访问老王论坛:laowang.vip)
' 重命名文件
; K0 V0 Q! v C. w file.Name = newFileName
1 @. \, V. l/ F- V$ B( ?: n End If5 A B' c+ p" _4 m3 N7 b(欢迎访问老王论坛:laowang.vip)
End If
! }7 I8 W. b2 V! q( [7 w; m Next
/ c, ^7 k, G, G" ^End Sub
% p! h% h6 n3 {, X9 B' v1 G G! |0 {% O/ T( _: f, z(欢迎访问老王论坛:laowang.vip)
0 Y- O/ M/ W3 U; q" C+ k( O
3 Z, N5 G; {( o& [8 R* R |