马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):
! _6 X( P( r7 _' j. ~" B" \1 |' z+ [0 t0 p7 J: Y$ G% P( y(欢迎访问老王论坛:laowang.vip)
Q9 @2 m2 Q0 A# R4 }# L3 K(欢迎访问老王论坛:laowang.vip)
' 修改文件后缀名.vbs1 g5 A2 Z u0 n(欢迎访问老王论坛:laowang.vip)
'
3 C% ~) _7 W& g" H! [2 v' 功能说明:+ m# F% U' H+ m, Q7 P: p5 K(欢迎访问老王论坛:laowang.vip)
' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。 2 e+ q! `- |. @" ]" A) m1 E( Z(欢迎访问老王论坛:laowang.vip)
' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。
, t( b8 \5 {% j) R' s) w. T': P8 L0 s% K: Z4 e(欢迎访问老王论坛:laowang.vip)
' 使用说明:
3 b0 S* |0 J# L6 _' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。0 V8 q1 H7 L+ o: o6 K0 X1 x/ A(欢迎访问老王论坛:laowang.vip)
' 2. 双击运行脚本或通过命令行运行。+ H1 @* N; g6 j7 V8 }& W+ N% |(欢迎访问老王论坛:laowang.vip)
' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。% h/ n) c1 l# `2 J* j, Q(欢迎访问老王论坛:laowang.vip)
' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。
" ^& d+ t* V$ j4 x' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。9 \" \9 o# y- W M+ S: H(欢迎访问老王论坛:laowang.vip)
' 6. 完成后,脚本会弹出消息框提示操作已成功完成。
, C( p* N6 S" D
: t, M4 e E- d5 Q1 Y# Y3 iOption Explicit
6 d# d0 E& @8 \1 P/ m& h$ f" A
# l; _0 D/ N9 o; r' 获取当前目录的路径
$ t; m5 K8 I1 @8 h4 KDim folderPath
h9 z- a, F% [7 }+ y* {6 Z* d9 xfolderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")
6 V5 ^ T: o$ l2 y
5 s/ [0 o! I7 z( z3 R1 m) v' 获取用户输入的新文件后缀名(不包含点)1 S' N* I8 Z6 c% @(欢迎访问老王论坛:laowang.vip)
Dim newExtension1 C# b" P* O Q7 D0 t# R9 I# w(欢迎访问老王论坛:laowang.vip)
newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")9 ~, e" t2 H# W6 t: N4 p" A(欢迎访问老王论坛:laowang.vip)
7 f0 P, ~0 A! `3 D) g4 C, O(欢迎访问老王论坛:laowang.vip)
' 如果用户取消了输入框,则退出脚本+ t2 H( A [) ` F3 l4 x(欢迎访问老王论坛:laowang.vip)
If newExtension = "" Then
2 J( w1 y3 {4 E MsgBox "操作已取消。", vbInformation, "信息", F5 w/ ]) W% u(欢迎访问老王论坛:laowang.vip)
WScript.Quit g- w3 D( g/ k0 F1 o* t$ f(欢迎访问老王论坛:laowang.vip)
End If
; x+ Y" d" j9 L" k1 u( F
; f5 s4 k- p2 ^- e, s4 K% a* v" ]' 确保新的后缀名不包含点(.). I. Q) f! [ V0 X! m% D z, C(欢迎访问老王论坛:laowang.vip)
If InStr(newExtension, ".") > 0 Then
8 ~$ t+ s0 P$ G7 V( [* | MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"
- C9 ]) V8 N; g9 b: t( b5 r WScript.Quit
6 |9 l) L; l# Y( J4 EEnd If( x: H6 [8 Y2 C% \. Z; _0 @# a(欢迎访问老王论坛:laowang.vip)
6 Z8 ?8 t) A3 {# x' c% K2 w(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象3 w6 v; m& M! V4 t7 j- |(欢迎访问老王论坛:laowang.vip)
Dim fso, folder, subFolder; b# O- V& X9 n. _(欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject")
" s8 u- O2 U& d" a
8 P! G& ]; B+ i' 获取当前目录的 Folder 对象
5 y$ M) Y/ X, U: }9 _4 tSet folder = fso.GetFolder(folderPath)
$ R b0 \& b0 t5 O! L$ ]
+ P# d4 p/ M' w! ]) f9 P/ {0 |3 O z' 检查当前目录是否包含子目录
" e/ }+ j) n) U$ u* JDim hasSubFolders7 Z: l3 o9 d% E. A4 }: c(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 0
6 d; V2 o: W! ?4 ]3 J# u, z/ D" [& V; W a6 J% U(欢迎访问老王论坛:laowang.vip)
' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件, |/ ]& \% D" Y- h1 h: n(欢迎访问老王论坛:laowang.vip)
Dim modifySubFolders, R/ |- f; U$ U2 J ?) [(欢迎访问老王论坛:laowang.vip)
If hasSubFolders Then
3 p/ m- a: E, } modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")' H; {! U. ?* W" n$ S(欢迎访问老王论坛:laowang.vip)
End If* M5 m" e5 R4 |; P7 l. D6 b: D9 j0 d0 L(欢迎访问老王论坛:laowang.vip)
" n7 J0 N( d7 G# E8 R, G(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件( Z" ~1 c% u3 O2 y(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension)/ }0 i7 W* I4 H(欢迎访问老王论坛:laowang.vip)
+ Y+ e0 C( A" h- ~(欢迎访问老王论坛:laowang.vip)
' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件
# r4 o D2 b" c3 C5 i4 `: f( C4 N: NIf hasSubFolders And modifySubFolders = vbYes Then
# o* o- M: Q" d7 ?2 y! { For Each subFolder In folder.SubFolders6 [4 n1 v3 b7 v6 M(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(subFolder, newExtension)1 {5 S; P1 g! E# J. F7 V(欢迎访问老王论坛:laowang.vip)
Next5 T; X! U0 M4 A- L3 h(欢迎访问老王论坛:laowang.vip)
End If) @5 F" ]. \ Y! b- X$ Q(欢迎访问老王论坛:laowang.vip)
$ ~3 c+ v" \% w. d; h! m8 p' 提示用户操作完成6 X3 ?2 |$ d+ }2 S& M(欢迎访问老王论坛:laowang.vip)
MsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"
3 f# M& h# u4 t# B5 {6 o% {7 Y& I- s1 U; k$ I# f* s5 j: O9 q(欢迎访问老王论坛:laowang.vip)
' 处理指定目录中的文件的子程序' X% g2 ?* h9 z3 Y4 R1 |4 D(欢迎访问老王论坛:laowang.vip)
Sub ProcessFiles(targetFolder, newExtension)4 N( Y( S: m6 X* e1 d(欢迎访问老王论坛:laowang.vip)
Dim file, oldName, baseName, currentExtension, newName, newFileName, counter
6 ^; N) q: d0 n, T+ _7 @% c Dim nameDict S; L5 |3 \. C1 M* S% \(欢迎访问老王论坛:laowang.vip)
. C+ k0 N6 a9 P% |% x$ s) Q(欢迎访问老王论坛:laowang.vip)
' 创建一个字典对象,用于存储当前目录内的文件名1 [% c, O+ W$ [# N. @(欢迎访问老王论坛:laowang.vip)
Set nameDict = CreateObject("Scripting.Dictionary")% Z" o. L& r, h( N(欢迎访问老王论坛:laowang.vip)
7 w8 A$ ]" C( C5 {- B+ }' V" H(欢迎访问老王论坛:laowang.vip)
' 遍历指定目录下的所有文件; p( M/ m$ f" |5 G# I; g& I(欢迎访问老王论坛:laowang.vip)
For Each file In targetFolder.Files C: G7 o5 c- x& [1 C(欢迎访问老王论坛:laowang.vip)
' 跳过后缀名为 .vbs 的文件# I8 k% F5 `" m4 Q% B(欢迎访问老王论坛:laowang.vip)
If LCase(fso.GetExtensionName(file)) <> "vbs" Then6 Y/ [- u4 c/ F' u# d r) p2 y* A(欢迎访问老王论坛:laowang.vip)
' 获取文件的旧名称、基础名称和当前后缀名
0 i7 _# i/ u% B! a6 o2 m- v+ k/ \2 ~ oldName = file.Name
2 N/ G! d) Q2 _: \' p! W baseName = fso.GetBaseName(file)
5 n" n( w$ p9 W2 e currentExtension = LCase(fso.GetExtensionName(file))
8 g4 V$ N' F; U, }" h8 Y8 U( Z2 `0 Z8 R% R(欢迎访问老王论坛:laowang.vip)
' 如果当前后缀名与新后缀名不同,则进行重命名
( ~: U9 t# o8 U; `. H; L/ Z; k If currentExtension <> LCase(newExtension) Then
. q( N9 S" ~- B2 M ' 创建新的文件名
% c: q# Y* b. N3 o newName = baseName & "." & newExtension/ O4 G" I0 A. f; Q; N, b* t# Y(欢迎访问老王论坛:laowang.vip)
; }, i4 @ Z: ]5 b8 r: S* I(欢迎访问老王论坛:laowang.vip)
' 检查是否已有同名文件,如果有,则处理重名
6 H9 E5 z) S; u% ?5 v, j& r( r5 P newFileName = newName1 i) a$ }3 M& ^. r/ @; t(欢迎访问老王论坛:laowang.vip)
counter = 1
% f! @% G I! P ' 确保新的文件名唯一
2 p6 _" |0 E9 P# a( n% `% Z While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)) D: h) |+ B! p( y5 J, Q2 T' b. i(欢迎访问老王论坛:laowang.vip)
newFileName = baseName & "(" & counter & ")." & newExtension
+ ? ~9 g9 S6 T: O8 ]/ _: I counter = counter + 16 b7 h1 d7 g& B(欢迎访问老王论坛:laowang.vip)
Wend+ K& S- I1 a3 K8 v* ^% l1 M$ F(欢迎访问老王论坛:laowang.vip)
8 n: p; a- |% G4 P% \(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名
+ A, c; W+ v# E4 D8 ?1 X nameDict.Add newFileName, True1 d3 ~+ f7 T0 Z% F1 V6 g(欢迎访问老王论坛:laowang.vip)
, J, A' a4 r* s) }( y) }/ F(欢迎访问老王论坛:laowang.vip)
' 重命名文件
% S3 g: T" g# m file.Name = newFileName) j& K! l5 V4 }3 v' l9 ?0 p(欢迎访问老王论坛:laowang.vip)
End If
- L4 Z# F: j" {. D! @ End If: q+ a( b& |9 m5 C3 s2 D; `+ t(欢迎访问老王论坛:laowang.vip)
Next
( U" `7 x; e+ l6 t1 ?# ^4 gEnd Sub
& ^ k; c0 c/ M1 ~0 r$ a N1 b7 q8 [) f w" F! m) a(欢迎访问老王论坛:laowang.vip)
- q7 V4 V2 `. G( D- q# p2 E(欢迎访问老王论坛:laowang.vip)
; x5 ~ U7 X1 ^$ i(欢迎访问老王论坛:laowang.vip)
|