马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):
/ d8 G0 Y2 F! q: x) B) U4 r* g! ]6 o. g& z# I$ Q(欢迎访问老王论坛:laowang.vip)
; z+ s2 B# Y- |$ P(欢迎访问老王论坛:laowang.vip)
' 修改文件后缀名.vbs0 w8 ?+ x7 u, Y- V9 `; ?' J(欢迎访问老王论坛:laowang.vip)
'5 y/ V. X L3 I; k(欢迎访问老王论坛:laowang.vip)
' 功能说明:
( a7 B* y. O/ C' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。
5 @) i' h! N9 ^! B$ x% q' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。 c, ^: v- p2 j(欢迎访问老王论坛:laowang.vip)
'
8 W9 B+ r& f- o" {1 M1 Y1 n& r' 使用说明:
- N. V+ J" K% _: C, H. X. \' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。5 {6 \- M) w1 S7 U(欢迎访问老王论坛:laowang.vip)
' 2. 双击运行脚本或通过命令行运行。! a6 O; s$ C- e+ \/ F# Z. F(欢迎访问老王论坛:laowang.vip)
' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。
4 }! R3 f- u# ^: @ |+ C' Y8 r' h' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。7 @% r) g, `: a# w(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。
% ]' h6 }) n8 y6 b' 6. 完成后,脚本会弹出消息框提示操作已成功完成。* B2 @! j" K& ], g4 }(欢迎访问老王论坛:laowang.vip)
: c! R! k* o K. QOption Explicit
6 p: v0 a2 d/ ]5 m+ } E ?
. N x6 |' W9 E# @' 获取当前目录的路径
j) C4 v* E- N3 a5 _2 G% p0 gDim folderPath) o! x# n- @9 l" Q# K+ i+ x(欢迎访问老王论坛:laowang.vip)
folderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")8 l# p+ n2 Y) _1 \(欢迎访问老王论坛:laowang.vip)
: R+ i( J8 {; u* l# o0 ^ g( Y' 获取用户输入的新文件后缀名(不包含点)
3 N% V _6 k- ]Dim newExtension
/ U5 l. D" Z2 H# M- C8 XnewExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")) @0 @ K+ G& l/ \& I5 i: d0 S(欢迎访问老王论坛:laowang.vip)
% v( z( q+ y' `" ]2 e5 a n(欢迎访问老王论坛:laowang.vip)
' 如果用户取消了输入框,则退出脚本
8 V! `5 b! @- P( L' ~* _If newExtension = "" Then
3 v& n2 }! j* w, U MsgBox "操作已取消。", vbInformation, "信息"
& A: Z3 _+ B+ k! e/ \+ h WScript.Quit
2 k% }: d2 Z4 |End If7 U* [- C4 f: A# R& B; p! J(欢迎访问老王论坛:laowang.vip)
, K* \- T4 `+ E& Z4 ~, i( T) L/ j7 ~' 确保新的后缀名不包含点(.)+ F% h1 p; d/ G# ^(欢迎访问老王论坛:laowang.vip)
If InStr(newExtension, ".") > 0 Then
# y, N4 E3 a! S6 I" y" |: x MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"3 O/ {: l% L7 v(欢迎访问老王论坛:laowang.vip)
WScript.Quit2 P# P5 n9 w- }3 }. y: k(欢迎访问老王论坛:laowang.vip)
End If; w1 Q; W( O3 W0 n(欢迎访问老王论坛:laowang.vip)
7 e8 X0 o! \2 ~(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象" f t6 M" D2 h6 z(欢迎访问老王论坛:laowang.vip)
Dim fso, folder, subFolder* Q5 z) k7 x1 y( R(欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject")
4 H0 h# z: ~- k8 s! N2 l- w% ~(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的 Folder 对象
; E5 {, j$ m x! R! J a' QSet folder = fso.GetFolder(folderPath)- F; o4 X3 K4 V+ y(欢迎访问老王论坛:laowang.vip)
! X& `1 I1 n( p/ b, u% a(欢迎访问老王论坛:laowang.vip)
' 检查当前目录是否包含子目录2 a0 j: B: S1 @2 s* a) w+ X: J4 x(欢迎访问老王论坛:laowang.vip)
Dim hasSubFolders
# k' V& F8 X; e; k+ ~$ YhasSubFolders = folder.SubFolders.Count > 0 a g; m! g1 c$ m6 D(欢迎访问老王论坛:laowang.vip)
0 Y8 P, `) Y6 [. W; V- e; N(欢迎访问老王论坛:laowang.vip)
' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件7 J. ?. M8 f% E' S(欢迎访问老王论坛:laowang.vip)
Dim modifySubFolders& o4 N4 }6 k/ Z- C$ M) P/ m(欢迎访问老王论坛:laowang.vip)
If hasSubFolders Then0 A, A& i( e% p* G7 R8 H(欢迎访问老王论坛:laowang.vip)
modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
# m5 p7 ~8 ^5 Q; I& ?$ |End If
# n# P% J% u0 O
U% V* r' B; F; U, M- N, j2 c% W/ f' 处理当前目录中的所有文件, s0 F g2 n; G' i4 G8 j# b* @(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension)
8 R- T5 r7 w3 Y5 [" O
* @5 O5 L X' @3 @: p6 {' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件
F- Q8 d: _4 h/ x: |# XIf hasSubFolders And modifySubFolders = vbYes Then$ O t" M0 U! U# w& @4 e(欢迎访问老王论坛:laowang.vip)
For Each subFolder In folder.SubFolders
8 l$ Z0 }, X8 o% B$ F7 Z7 k! ? Call ProcessFiles(subFolder, newExtension)
3 x/ a5 q2 c+ A5 Z( T Next
9 F7 o) a* {8 b8 v5 Q2 X+ OEnd If
, C, ^% n k( f2 g" d
) H5 |' g# {$ [' X$ L; \2 q' 提示用户操作完成. A$ q! e2 a: T6 c, q(欢迎访问老王论坛:laowang.vip)
MsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"7 G1 F- U2 V: s# K/ p0 U(欢迎访问老王论坛:laowang.vip)
Q- P2 Q& L% b9 H- \(欢迎访问老王论坛:laowang.vip)
' 处理指定目录中的文件的子程序
# K* K% H/ o' d/ H% e: rSub ProcessFiles(targetFolder, newExtension)
& n5 u" e3 W8 U" L- k/ k+ u Dim file, oldName, baseName, currentExtension, newName, newFileName, counter" m: u. \1 r* o1 z, V+ Q: t4 Q+ |(欢迎访问老王论坛:laowang.vip)
Dim nameDict0 f3 S0 e/ w/ ~3 X; a1 _/ c9 q(欢迎访问老王论坛:laowang.vip)
$ i* D# ] Y" G* O6 z. o(欢迎访问老王论坛:laowang.vip)
' 创建一个字典对象,用于存储当前目录内的文件名$ o3 l8 w, @4 h$ R& v" S(欢迎访问老王论坛:laowang.vip)
Set nameDict = CreateObject("Scripting.Dictionary")& P1 X5 {( M: v& s) a: W0 P2 P: P(欢迎访问老王论坛:laowang.vip)
3 c% e$ R& B& x* \(欢迎访问老王论坛:laowang.vip)
' 遍历指定目录下的所有文件
6 \, `2 P! E I" C6 }3 K. |9 o For Each file In targetFolder.Files
$ s/ ^0 v8 L! w! l2 X$ e ' 跳过后缀名为 .vbs 的文件
3 l7 N; I/ w# ~3 t If LCase(fso.GetExtensionName(file)) <> "vbs" Then
3 \3 p( O& Z* h% R ' 获取文件的旧名称、基础名称和当前后缀名
: O" U- y1 X2 n' d oldName = file.Name
; U; y! x% ~1 d Y9 |6 r% @: [ baseName = fso.GetBaseName(file)
) q& X# f& Q- | x( { S currentExtension = LCase(fso.GetExtensionName(file))
) x. n% a) o/ Q. Q9 V" F9 F3 h) p: H# ?(欢迎访问老王论坛:laowang.vip)
' 如果当前后缀名与新后缀名不同,则进行重命名
/ ^- e/ A( z, a3 o3 A1 W9 V: [ If currentExtension <> LCase(newExtension) Then
& f8 _, S3 C& g2 y ' 创建新的文件名8 u/ I6 ~' q, s9 b3 G: V, q) K8 J) X6 n(欢迎访问老王论坛:laowang.vip)
newName = baseName & "." & newExtension
) N( B# E7 c, R. j( S$ F% D! g(欢迎访问老王论坛:laowang.vip)
' 检查是否已有同名文件,如果有,则处理重名
; l* {( a: U; v& K* v/ ] newFileName = newName9 B; {* g( b+ e2 T/ _1 M, C(欢迎访问老王论坛:laowang.vip)
counter = 1. ^ l6 S$ E6 a( q1 J# q" i. G(欢迎访问老王论坛:laowang.vip)
' 确保新的文件名唯一, f6 R6 @, l' L. U# ~# q(欢迎访问老王论坛:laowang.vip)
While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)
% z& ^4 M# ~- f) T7 }7 ? newFileName = baseName & "(" & counter & ")." & newExtension1 i* l! x* f2 H1 Q. j(欢迎访问老王论坛:laowang.vip)
counter = counter + 1/ {5 j1 G% B% W; i) a% F: z(欢迎访问老王论坛:laowang.vip)
Wend% X- o2 p- y" H+ s) W(欢迎访问老王论坛:laowang.vip)
( P9 S2 x. `0 z+ R3 n(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名8 K$ Q- o, y4 ^$ C- O/ D/ z3 T(欢迎访问老王论坛:laowang.vip)
nameDict.Add newFileName, True
+ C+ O. ?# i0 q$ n7 o+ @
- Q j1 d4 I( m/ ]2 @+ ~3 T ' 重命名文件
+ }& W6 G; Z1 R# Z file.Name = newFileName3 c" k _! X! C3 t. e(欢迎访问老王论坛:laowang.vip)
End If
1 w2 x% Z5 D1 y$ G/ H) Q. L+ p End If
7 m: v; `+ [* E; X; a4 z Next' p1 f. w0 e) K) a8 W- h(欢迎访问老王论坛:laowang.vip)
End Sub1 B" H7 K+ X% |8 [; V2 z(欢迎访问老王论坛:laowang.vip)
7 a9 X9 |4 m7 Z6 y( q! y
" D! O/ ? p0 x; U- W" o1 s, t% B8 w0 g) ?! p, V, T(欢迎访问老王论坛:laowang.vip)
|