马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买): f3 I: r- I A(欢迎访问老王论坛:laowang.vip)
8 a6 ~3 O& A8 L(欢迎访问老王论坛:laowang.vip)
5 q( O# a( u$ |$ q' E. B1 a' 修改文件后缀名.vbs" c8 Y3 J" }* e8 v(欢迎访问老王论坛:laowang.vip)
'
& Q5 R' P6 T) q) F4 I. }' 功能说明:1 m$ B5 G1 r% T. F(欢迎访问老王论坛:laowang.vip)
' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。 g2 A: ~4 S! v3 m(欢迎访问老王论坛:laowang.vip)
' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。
2 d, Z" Y! E; s$ X( b# H+ t'
" t4 N1 P" w- L% s( R% Z' 使用说明: h) h! `1 m4 L: S1 H1 w5 z m0 g5 U3 Z: S(欢迎访问老王论坛:laowang.vip)
' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。1 ~9 s x* `6 i" G, j5 |- s @(欢迎访问老王论坛:laowang.vip)
' 2. 双击运行脚本或通过命令行运行。
9 {8 \ f: T" T+ w/ n. y( V' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。
6 Q( V+ F2 |, f4 r' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。+ I* X+ B; ]$ N p: K, k" B(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。
/ o m5 `. Z0 Z8 h0 M5 j1 D$ ^' 6. 完成后,脚本会弹出消息框提示操作已成功完成。( v, E3 |; ~8 v, s) j5 ~(欢迎访问老王论坛:laowang.vip)
3 W! o& n5 ]$ _! I1 R% MOption Explicit+ s% M% n+ @- W; X) P, I(欢迎访问老王论坛:laowang.vip)
) q* w! G8 n, { U(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的路径; E, F- d8 p1 x$ c(欢迎访问老王论坛:laowang.vip)
Dim folderPath
8 L+ S% ?: k+ f5 ]4 ?3 HfolderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")
5 [+ X% {& d- g' t! a+ E& l2 L5 c. `) T& E6 P2 q$ V. o(欢迎访问老王论坛:laowang.vip)
' 获取用户输入的新文件后缀名(不包含点): u5 C% z; N: D0 v& p1 {. o; I(欢迎访问老王论坛:laowang.vip)
Dim newExtension
" u. X$ V1 c! I [8 ^( ^# OnewExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")
6 T& j. \3 E# t9 V) f; z: u
* |/ S% U: J+ A2 c2 z' 如果用户取消了输入框,则退出脚本
6 e) ]: o6 q, p+ b" r3 m- nIf newExtension = "" Then
}/ ?) c3 j" u5 ^ w4 l MsgBox "操作已取消。", vbInformation, "信息"; ?% ~0 k6 w, J$ Q6 f$ ](欢迎访问老王论坛:laowang.vip)
WScript.Quit
8 {6 c# F& C4 @6 S* \0 ?End If5 C( V1 ]1 R% X5 R& o3 P, `(欢迎访问老王论坛:laowang.vip)
" e* N5 b& J$ y" ](欢迎访问老王论坛:laowang.vip)
' 确保新的后缀名不包含点(.)! R$ p- L1 r% h+ |% U) R, j(欢迎访问老王论坛:laowang.vip)
If InStr(newExtension, ".") > 0 Then, g1 R5 o( k4 u" n* O) N# |(欢迎访问老王论坛:laowang.vip)
MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"" C, r, M3 T5 x2 q7 E E4 H6 L(欢迎访问老王论坛:laowang.vip)
WScript.Quit
; j l# U7 [ n1 W+ X, H6 a! \4 REnd If& I0 l/ t+ a. W* ]5 G$ N(欢迎访问老王论坛:laowang.vip)
9 W; B$ v1 K# ]) s' ]! b1 w' 创建 FileSystemObject 对象3 c- V! r1 k8 a# N$ u$ C(欢迎访问老王论坛:laowang.vip)
Dim fso, folder, subFolder6 d7 _! x7 D9 K W(欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject")/ q4 \/ K( q2 |& N" l(欢迎访问老王论坛:laowang.vip)
# N. n% R1 ~: U* U% [+ u(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的 Folder 对象
" U) W' i P7 L1 Q" ^4 pSet folder = fso.GetFolder(folderPath)
7 d; V& U% ^& j/ R- Y
) i) E+ [1 v$ J' P& A' 检查当前目录是否包含子目录* v- x1 K# m& P4 x+ H) k(欢迎访问老王论坛:laowang.vip)
Dim hasSubFolders" k4 ~' ]0 O* d(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 0# J0 e) s+ k, ] |/ r& m(欢迎访问老王论坛:laowang.vip)
* M0 L# c! J7 D9 f% B, u' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件* R6 O0 |6 O2 d- v(欢迎访问老王论坛:laowang.vip)
Dim modifySubFolders
u% f0 Q C! |3 ~- n6 aIf hasSubFolders Then1 h6 @0 K" G* _(欢迎访问老王论坛:laowang.vip)
modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
; t, t' v# Z& U. {) ^$ M& w- p9 vEnd If; x9 }. ^ v+ N! n% x3 W( ^6 f, s(欢迎访问老王论坛:laowang.vip)
% {' K/ a$ r1 s2 [8 K: w' 处理当前目录中的所有文件
: f* ~$ T1 a7 @ TCall ProcessFiles(folder, newExtension)
1 `; y1 N# O# S0 B: o, K. Z) F1 |
% h! a- Z- w) P7 w+ t' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件
1 e4 l* }) s7 z# f5 h# x- E, CIf hasSubFolders And modifySubFolders = vbYes Then5 P V3 g" M' {1 q+ B1 E4 B(欢迎访问老王论坛:laowang.vip)
For Each subFolder In folder.SubFolders
z _) D; ]) L4 i4 {: c+ G Call ProcessFiles(subFolder, newExtension). P. s3 _( r2 Q, E. O: n* F- z(欢迎访问老王论坛:laowang.vip)
Next
/ L7 a& ~+ }7 |End If
" m/ r' a6 R3 `$ ~. Q, m# t/ r
: H" c& ?% o* y' l9 N4 S4 r; s2 c- H' 提示用户操作完成
/ `: [# T, I& l0 CMsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"
1 e# Z2 G% \9 ]) h$ t1 ?' r1 M S; `) e* P# d(欢迎访问老王论坛:laowang.vip)
' 处理指定目录中的文件的子程序! Y; O8 v) N+ p( B5 L5 n$ w8 |(欢迎访问老王论坛:laowang.vip)
Sub ProcessFiles(targetFolder, newExtension)
2 G1 h2 g5 _3 ^1 D Dim file, oldName, baseName, currentExtension, newName, newFileName, counter
- z' B: @) E& ~, h/ t3 ^ Dim nameDict% S: }4 X3 W! w1 u(欢迎访问老王论坛:laowang.vip)
9 K6 j0 [ s, v' k: \3 g9 Z2 A(欢迎访问老王论坛:laowang.vip)
' 创建一个字典对象,用于存储当前目录内的文件名
- C3 U* [0 m: x2 P g6 R* ^; r0 r+ R Set nameDict = CreateObject("Scripting.Dictionary")5 `0 v# `9 V! R S4 F(欢迎访问老王论坛:laowang.vip)
3 Z( o2 h" c& P. i8 G% U* V(欢迎访问老王论坛:laowang.vip)
' 遍历指定目录下的所有文件
& T! L/ Q) Z9 j: L For Each file In targetFolder.Files
5 {/ k8 }# i: o- ^+ [* T ' 跳过后缀名为 .vbs 的文件5 U9 Y( ]8 }( g! Q6 k% F1 N(欢迎访问老王论坛:laowang.vip)
If LCase(fso.GetExtensionName(file)) <> "vbs" Then
" u3 t* P+ Q$ Z! N+ L ' 获取文件的旧名称、基础名称和当前后缀名, f" L) n |3 X& B( v/ T2 y(欢迎访问老王论坛:laowang.vip)
oldName = file.Name) B" o1 x! Q1 ^ H" J8 U* M(欢迎访问老王论坛:laowang.vip)
baseName = fso.GetBaseName(file)) P1 U$ @' Z% _' `(欢迎访问老王论坛:laowang.vip)
currentExtension = LCase(fso.GetExtensionName(file)), j; z: x; h" Q: o# z1 Z' B: @2 Q(欢迎访问老王论坛:laowang.vip)
- R* o3 x$ T0 z5 v(欢迎访问老王论坛:laowang.vip)
' 如果当前后缀名与新后缀名不同,则进行重命名% ]% d1 m9 ^* j1 |4 ?(欢迎访问老王论坛:laowang.vip)
If currentExtension <> LCase(newExtension) Then+ D9 S a1 v; X6 ?; J" |3 M(欢迎访问老王论坛:laowang.vip)
' 创建新的文件名4 j& R; Y7 F7 p2 d4 a5 F# X(欢迎访问老王论坛:laowang.vip)
newName = baseName & "." & newExtension$ {+ R. B! s. ?3 G6 Y* h x$ D(欢迎访问老王论坛:laowang.vip)
$ E) ^6 l5 @5 L* h ' 检查是否已有同名文件,如果有,则处理重名
) [ U8 M5 i3 d+ C- ?- M$ {0 L newFileName = newName6 V3 w$ V) N* G! b7 P(欢迎访问老王论坛:laowang.vip)
counter = 1' w" {9 P5 Y0 j. h(欢迎访问老王论坛:laowang.vip)
' 确保新的文件名唯一1 e5 g% Z5 w8 d: `" |; R5 B(欢迎访问老王论坛:laowang.vip)
While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)
- T* z3 M$ Q; C0 c newFileName = baseName & "(" & counter & ")." & newExtension
: Q# B& P' k4 c9 b# A# |: Q. y counter = counter + 10 o, v9 x% z* s( v l( {4 A(欢迎访问老王论坛:laowang.vip)
Wend
/ _$ G) s g, ?- H' F; x) B3 f(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名: q" }* A6 @% n% B' a6 Q: A# `(欢迎访问老王论坛:laowang.vip)
nameDict.Add newFileName, True
6 T @+ ]% w. m5 n7 p
4 @8 u M! ]: k4 ` t* }& ` ' 重命名文件' d! Q& f( g+ n ](欢迎访问老王论坛:laowang.vip)
file.Name = newFileName4 J2 H$ [: l8 ^(欢迎访问老王论坛:laowang.vip)
End If8 ?- D: L( t4 n" l(欢迎访问老王论坛:laowang.vip)
End If
9 t) K* g7 x3 v* x. }; c) o+ S Next
% L9 N6 G# R# |$ Q* z/ n* EEnd Sub. H1 i9 ^. i7 o* _1 i! c) R% F4 r(欢迎访问老王论坛:laowang.vip)
& ~ Y8 a2 J, \+ [6 V
% R! z* O$ Q z' {/ n! r1 j
8 e7 G) [; \; a: O: E& _9 ]7 D |