马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):
. y6 W, N8 i+ H0 u% ?1 I) h) w0 l2 D8 C(欢迎访问老王论坛:laowang.vip)
! P. R8 E9 Q; N& _9 j+ Y' 修改文件后缀名.vbs
/ }; \; |; Y& G6 N5 J% P0 |'
6 {, H9 B) g ]: J' t' 功能说明:, F+ _2 H% y5 Q: \4 H& B(欢迎访问老王论坛:laowang.vip)
' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。 4 d$ C6 s5 J+ P# t8 t(欢迎访问老王论坛:laowang.vip)
' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。) X1 g4 y9 L, w0 \(欢迎访问老王论坛:laowang.vip)
'. H+ @# N4 W, E& ^(欢迎访问老王论坛:laowang.vip)
' 使用说明:$ L3 k1 y4 ^# T1 ]' a+ m(欢迎访问老王论坛:laowang.vip)
' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。& b' X: i' P3 y6 [(欢迎访问老王论坛:laowang.vip)
' 2. 双击运行脚本或通过命令行运行。
* o# t: Y! h; h1 E5 `, F% I8 e' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。
. f$ i. f) D7 e' \' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。
5 L* L& c5 x# [! Q9 B' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。
; m3 d$ P3 _- e, N; j( ~0 T' L' 6. 完成后,脚本会弹出消息框提示操作已成功完成。
# n, d& P1 l1 V: Q
+ L ~3 ?" S' G3 ~5 B: o" k. IOption Explicit
' R; M7 |( ]) A. c
- Y- \$ j8 E* i8 H9 A' 获取当前目录的路径7 x$ q" k. X w9 T" d5 l( ^(欢迎访问老王论坛:laowang.vip)
Dim folderPath, U/ u( g3 }* y' w(欢迎访问老王论坛:laowang.vip)
folderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")
2 W; h' ?7 o( b
4 w# a6 {! ?- u% J, R' t6 S' 获取用户输入的新文件后缀名(不包含点)6 G9 U+ Q7 u$ C, N(欢迎访问老王论坛:laowang.vip)
Dim newExtension
# r3 E/ l+ D# f& NnewExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")
7 E7 u2 ?! P0 _& ?
& e4 q: Z# c3 u5 c( f) j' 如果用户取消了输入框,则退出脚本" z; g- w9 W& q" w1 a(欢迎访问老王论坛:laowang.vip)
If newExtension = "" Then$ o4 A/ h- t }( |( h(欢迎访问老王论坛:laowang.vip)
MsgBox "操作已取消。", vbInformation, "信息"
2 N8 w, t/ F0 l" l, y WScript.Quit
& v! \- E0 d1 e& r% }* s* l6 R5 d; k$ J# REnd If
' Q, G4 w9 g# y7 {6 X% c; ~( l& l+ ?* c(欢迎访问老王论坛:laowang.vip)
' 确保新的后缀名不包含点(.)4 @+ p7 d0 d& q0 G(欢迎访问老王论坛:laowang.vip)
If InStr(newExtension, ".") > 0 Then
! Y6 ~% o; U$ X% g MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"2 w8 i. I* X/ q# V(欢迎访问老王论坛:laowang.vip)
WScript.Quit1 ?0 V- e3 i& t: v, M# }; y(欢迎访问老王论坛:laowang.vip)
End If& }: B. j7 W5 n( E! C$ J(欢迎访问老王论坛:laowang.vip)
D% C1 X [5 h# d; e6 T3 p' 创建 FileSystemObject 对象
: u: N: Y0 t3 Q# WDim fso, folder, subFolder% T0 B! o% I1 F+ X(欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject")+ n6 Z2 H1 Y/ w( @(欢迎访问老王论坛:laowang.vip)
5 s V/ }- V7 i# R) S' 获取当前目录的 Folder 对象9 J3 Z' [; o7 p) C# o8 G' d* v; U# Z(欢迎访问老王论坛:laowang.vip)
Set folder = fso.GetFolder(folderPath)* s- D+ y. N8 V' w- H- p(欢迎访问老王论坛:laowang.vip)
* E7 Q4 H. T% h1 v! M9 L& R. a, {(欢迎访问老王论坛:laowang.vip)
' 检查当前目录是否包含子目录
L; p) ~& N/ {7 [! o4 xDim hasSubFolders! a- W1 S, k* J! j4 D5 c6 Z& A(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 0
% v3 d/ }, e, `/ L2 d
" o/ w. G9 E9 I; j G* c' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件4 A: ]" C# ^ {6 s( h& ^. e(欢迎访问老王论坛:laowang.vip)
Dim modifySubFolders
6 F, S% E8 y' v: oIf hasSubFolders Then7 l1 w0 N/ [0 g" _( B# a(欢迎访问老王论坛:laowang.vip)
modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件"): Y- \& L0 x5 ?! y( A(欢迎访问老王论坛:laowang.vip)
End If3 I& S3 w1 e5 i2 M7 u6 @9 l+ [7 c(欢迎访问老王论坛:laowang.vip)
! f0 `! u C O R9 I: L' t4 x(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件9 p( o6 F+ x4 n& l/ P(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension)5 ^. y7 S6 N$ g6 I(欢迎访问老王论坛:laowang.vip)
' _1 X! G* O5 L' z8 p3 M' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件" V2 z: i) i0 {7 ~6 \ v(欢迎访问老王论坛:laowang.vip)
If hasSubFolders And modifySubFolders = vbYes Then
) U% N2 R3 i7 I( x; L) S. b For Each subFolder In folder.SubFolders
8 g( x5 g9 A2 }0 i% J( J0 @ Call ProcessFiles(subFolder, newExtension)
+ E! l! Q4 o2 f: |! k; |3 a9 y( } Next6 a4 m# C) W! _(欢迎访问老王论坛:laowang.vip)
End If- M7 x: ~+ I7 C% [$ X(欢迎访问老王论坛:laowang.vip)
% M& U- i. H9 ^1 B1 ]6 F3 Q$ K1 X/ J' 提示用户操作完成
, A( M0 m. x+ N: ^, I5 TMsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"
- l- S/ ?, {( `0 T' m# {- f7 Q+ ?9 H, n; a4 _) V& y$ \(欢迎访问老王论坛:laowang.vip)
' 处理指定目录中的文件的子程序; N: T* i# U/ o% H1 r$ j( c(欢迎访问老王论坛:laowang.vip)
Sub ProcessFiles(targetFolder, newExtension)
/ r9 }. Z9 o- M* ]1 `6 H Dim file, oldName, baseName, currentExtension, newName, newFileName, counter9 }7 d7 f7 F. `" O(欢迎访问老王论坛:laowang.vip)
Dim nameDict4 m3 r5 ^" u; s8 W- z' l3 B( l(欢迎访问老王论坛:laowang.vip)
5 G' v+ K# f7 E ' 创建一个字典对象,用于存储当前目录内的文件名
# I ~4 ~& e4 G; U9 h7 _% i& J Set nameDict = CreateObject("Scripting.Dictionary")
, u; a7 J" p+ k. r; {/ c( {% N5 D$ t( U9 x(欢迎访问老王论坛:laowang.vip)
' 遍历指定目录下的所有文件1 v6 Z; J: S7 V% C+ b( a(欢迎访问老王论坛:laowang.vip)
For Each file In targetFolder.Files3 O/ E3 k. u$ r4 H(欢迎访问老王论坛:laowang.vip)
' 跳过后缀名为 .vbs 的文件- ]* Q+ M6 o* k. U2 L/ w(欢迎访问老王论坛:laowang.vip)
If LCase(fso.GetExtensionName(file)) <> "vbs" Then: H, h) `; G' J- ^9 C5 L8 ~4 ?, n(欢迎访问老王论坛:laowang.vip)
' 获取文件的旧名称、基础名称和当前后缀名6 k4 O" I& S9 U. H+ `; C, P(欢迎访问老王论坛:laowang.vip)
oldName = file.Name
/ [5 s- N% a7 r8 G! U" R# ?3 t3 E baseName = fso.GetBaseName(file)4 x$ n5 ~) F. m2 f* C6 L# {7 ?(欢迎访问老王论坛:laowang.vip)
currentExtension = LCase(fso.GetExtensionName(file))
9 _& v9 Q6 o7 u& [* O; i
4 J$ N6 _: I3 e. W5 a ' 如果当前后缀名与新后缀名不同,则进行重命名4 v# D9 E* y/ p( S) D(欢迎访问老王论坛:laowang.vip)
If currentExtension <> LCase(newExtension) Then7 K0 ?8 P0 n8 `5 }9 X f* v" ^% C! a(欢迎访问老王论坛:laowang.vip)
' 创建新的文件名
1 }' ?. {/ |, R+ o$ ^ newName = baseName & "." & newExtension
5 {3 p+ ?7 [$ M" m! M5 F/ }* h( s
+ m( M1 J* J1 a. } ' 检查是否已有同名文件,如果有,则处理重名
# j) {) h5 j! ?7 u" Z+ ` newFileName = newName
( L ?( P# j1 I9 T& ]! K counter = 1
m# }# P# P+ r ' 确保新的文件名唯一$ T* Q) z9 d# r- v( Y(欢迎访问老王论坛:laowang.vip)
While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)
, B O$ Y; ]* B/ U, B) D3 G9 c newFileName = baseName & "(" & counter & ")." & newExtension
) Q; `- K$ g' J. r8 p0 | counter = counter + 1+ D& |/ T) o2 I3 c& _8 \$ `(欢迎访问老王论坛:laowang.vip)
Wend0 R& M" x' w+ v2 [) _/ p j' n(欢迎访问老王论坛:laowang.vip)
1 B0 `* @2 E: B. N0 B2 h. {(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名
& A5 ~; I$ E# j8 L& H* f0 F: l nameDict.Add newFileName, True8 ~1 w4 y: ]/ j% M(欢迎访问老王论坛:laowang.vip)
2 C) B, K- E0 P# n4 T* C, k9 r ' 重命名文件1 z' A" w, w$ i5 a' X: o+ Y(欢迎访问老王论坛:laowang.vip)
file.Name = newFileName
( R* D; [ }$ m5 \; U/ S End If
3 `4 \+ v/ o/ D: g4 \# t! [8 c0 p End If! @+ r, Y) |2 |4 |" k& `7 b' i(欢迎访问老王论坛:laowang.vip)
Next
4 u& [7 s7 K, j) gEnd Sub
! g+ Z9 ]# l( h1 {/ t5 \* f
7 t% O0 I b0 f$ m; i0 v# @+ l: q3 O* H5 o S, \. [- ]2 |) k$ ]; Q(欢迎访问老王论坛:laowang.vip)
( U V" z( @ }; F0 g; m* k$ } |