马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):
9 s- G( |5 {6 t7 B7 B) m; M# u8 D1 t( z; m$ @8 m(欢迎访问老王论坛:laowang.vip)
: d1 }; ~: Z6 N4 H# s8 |1 d(欢迎访问老王论坛:laowang.vip)
' 修改文件后缀名.vbs) n/ V/ |% B* T(欢迎访问老王论坛:laowang.vip)
'
% q5 e2 h- N/ K' 功能说明:. D( Y! B7 p1 r4 w# Y$ ](欢迎访问老王论坛:laowang.vip)
' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。
- G! p$ }1 p: D" @' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。
4 m- s8 g: d7 E5 d; n' c7 f'
1 R0 X+ K' U$ p' 使用说明: |7 D H, v ^3 A Z2 z4 O* ~: D(欢迎访问老王论坛:laowang.vip)
' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。& }- Z# \" |8 y. ~# ~' l1 \* B(欢迎访问老王论坛:laowang.vip)
' 2. 双击运行脚本或通过命令行运行。
E/ ^, x M! ^$ ^% T- k' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。" p! ?% L6 t* q R. Q J(欢迎访问老王论坛:laowang.vip)
' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。
! f8 T0 s( v. T' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。
) M9 E1 e/ g; \& i$ n7 c' 6. 完成后,脚本会弹出消息框提示操作已成功完成。/ V2 b' K b' f(欢迎访问老王论坛:laowang.vip)
- r$ J2 \4 X6 B(欢迎访问老王论坛:laowang.vip)
Option Explicit
3 @4 |7 @0 o% W. K
7 i3 {8 o7 t2 x2 }* U$ B& C' 获取当前目录的路径
( \& h7 P: }0 m' v8 X J( J2 Q0 `Dim folderPath
) T! H- a0 [: s4 R4 h" D" E+ PfolderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")- D; I9 t1 N, i" [- {) Q% m(欢迎访问老王论坛:laowang.vip)
/ X. t8 |3 }/ D, J% U$ g; j' 获取用户输入的新文件后缀名(不包含点)
6 v/ R' \; [' B4 ^6 z* |0 N! u0 ?Dim newExtension
h8 H& r' P( B2 x$ wnewExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")
7 v# l* R# E. W# r# _9 h+ i& g+ k. e* ]3 W, a: B3 L2 p) A2 O! ~(欢迎访问老王论坛:laowang.vip)
' 如果用户取消了输入框,则退出脚本
8 u) S/ x2 M& mIf newExtension = "" Then
4 W, b+ r; h( {3 E& w. U" B. N" c MsgBox "操作已取消。", vbInformation, "信息"6 I8 I7 b3 a- M8 h% _(欢迎访问老王论坛:laowang.vip)
WScript.Quit) n6 O2 u% K8 }! H* x(欢迎访问老王论坛:laowang.vip)
End If
1 U! v/ `+ i* ^# b0 X. h8 l
% D A: k( j. I* x1 B' 确保新的后缀名不包含点(.)- F7 s, u/ V- @1 f(欢迎访问老王论坛:laowang.vip)
If InStr(newExtension, ".") > 0 Then
6 y! Y9 {4 y# |, P- g% x# u) ` MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"
: F5 c- o& F1 g0 X WScript.Quit
4 B! U( P8 d& Q" OEnd If: z7 s0 ^0 k0 _% j7 W7 r(欢迎访问老王论坛:laowang.vip)
( W5 P/ O+ ^$ e) f5 l# P1 ^, t% _) _(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象2 s i, N* |1 y- z6 s, g(欢迎访问老王论坛:laowang.vip)
Dim fso, folder, subFolder9 S/ b/ P3 z6 d3 i(欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject")
) ^! ^: i0 V& W* i% b
6 b* u {* u3 ~ ?5 Q i' 获取当前目录的 Folder 对象! x8 w5 d, }' ~& y0 P(欢迎访问老王论坛:laowang.vip)
Set folder = fso.GetFolder(folderPath)7 w& i! W/ r$ c(欢迎访问老王论坛:laowang.vip)
6 |. f9 }6 o1 G6 r9 E( O) s; I(欢迎访问老王论坛:laowang.vip)
' 检查当前目录是否包含子目录
|1 F# [0 f6 Z& Y% ?9 zDim hasSubFolders
1 X! g% G3 v* i" e% \hasSubFolders = folder.SubFolders.Count > 0
# U- L* D; f9 H3 }! ?2 d8 r/ M8 [
3 q8 Q8 d& a4 e2 _. F' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件
# e# t9 G4 F) u. A* J9 F% ~9 lDim modifySubFolders
$ j1 B3 w$ N( Q5 S/ ?" o/ R) tIf hasSubFolders Then
* a4 Y0 u" `/ i5 u& @0 n modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
1 C* q) k3 g G1 j( h% M. SEnd If
+ S2 Q# X% F: I s# q. Z& E1 g. p3 ?! D8 j. y9 J! p(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件$ @0 G- [8 o5 I8 p a# H+ V(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension)
& @/ k R$ g1 S% x* N" K
. K+ b2 h7 \' x2 B9 f9 `' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件
K. e2 x/ F( z, q& C2 Z, GIf hasSubFolders And modifySubFolders = vbYes Then9 Z) N1 h+ |+ Q7 l6 u1 F4 l, q' L6 v(欢迎访问老王论坛:laowang.vip)
For Each subFolder In folder.SubFolders
; c2 D) T; y$ V4 r" U Call ProcessFiles(subFolder, newExtension)9 L# K5 l, N C(欢迎访问老王论坛:laowang.vip)
Next
4 y5 Z2 _$ S4 G0 u' g3 ?End If
% x- t* z9 `! @1 w/ R
r) {4 r& T7 `, _$ V6 |* {' 提示用户操作完成+ S. f9 @8 S) H; S& \; ~% \3 ?(欢迎访问老王论坛:laowang.vip)
MsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"& @6 d g4 L G! x5 z7 O. U* L(欢迎访问老王论坛:laowang.vip)
) x. D* p" U( q+ z8 j(欢迎访问老王论坛:laowang.vip)
' 处理指定目录中的文件的子程序
& r6 P9 e2 ?$ wSub ProcessFiles(targetFolder, newExtension). O. ?: i, Y3 o4 a(欢迎访问老王论坛:laowang.vip)
Dim file, oldName, baseName, currentExtension, newName, newFileName, counter, ~! |% f0 V/ m8 _0 i) g; D0 p& m(欢迎访问老王论坛:laowang.vip)
Dim nameDict
8 x: F% T6 U3 ?) @' h2 P3 x& e9 i" ^$ h& ], {5 n(欢迎访问老王论坛:laowang.vip)
' 创建一个字典对象,用于存储当前目录内的文件名
" Y4 i3 H1 m3 ?. e# F- J% w$ Y Set nameDict = CreateObject("Scripting.Dictionary")
2 w% p) a3 u/ c+ e8 M
9 g) P# k* C; _3 e2 C* I* W# G ' 遍历指定目录下的所有文件" v- W6 n! m R K- e. q* p(欢迎访问老王论坛:laowang.vip)
For Each file In targetFolder.Files
. {" y$ i: _# V. l$ ?8 k# C ' 跳过后缀名为 .vbs 的文件
4 L$ p! B; w$ g- [ If LCase(fso.GetExtensionName(file)) <> "vbs" Then! w8 u3 l9 X3 [1 f) J: a4 i$ X# }% H(欢迎访问老王论坛:laowang.vip)
' 获取文件的旧名称、基础名称和当前后缀名6 t7 s0 U) k+ Z4 _1 n(欢迎访问老王论坛:laowang.vip)
oldName = file.Name7 U! i( t" b. Z6 F! s: J+ N8 h(欢迎访问老王论坛:laowang.vip)
baseName = fso.GetBaseName(file)! l4 Y O7 R- Z( ](欢迎访问老王论坛:laowang.vip)
currentExtension = LCase(fso.GetExtensionName(file))
6 m: O5 }+ ^+ {5 k+ o
5 m7 [( ^* h3 L8 G+ E ' 如果当前后缀名与新后缀名不同,则进行重命名4 F f/ e1 C' W5 ?(欢迎访问老王论坛:laowang.vip)
If currentExtension <> LCase(newExtension) Then
' R' H- b; z. R* `# Z; `2 _ ' 创建新的文件名, m! k: f, K6 k$ H: h1 x: b(欢迎访问老王论坛:laowang.vip)
newName = baseName & "." & newExtension
" c; X9 ^1 z" f2 K z l0 M9 h& D, n+ c" u! r0 c7 ~(欢迎访问老王论坛:laowang.vip)
' 检查是否已有同名文件,如果有,则处理重名/ h8 c1 i' P$ F(欢迎访问老王论坛:laowang.vip)
newFileName = newName% L) d$ P+ h& L& z(欢迎访问老王论坛:laowang.vip)
counter = 1
c4 D3 x( v3 d: t2 i9 G ' 确保新的文件名唯一
( f8 x1 f# j: d c6 u While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)7 ~; ~2 F. f5 o( _4 Z(欢迎访问老王论坛:laowang.vip)
newFileName = baseName & "(" & counter & ")." & newExtension
( B0 O# S+ E. q counter = counter + 1% {9 ?4 @( F+ B; K(欢迎访问老王论坛:laowang.vip)
Wend
& [5 R; P) N, }
* c( G- K" L2 c: B6 j ' 记录新的文件名
' M) \; f' u# G7 Q nameDict.Add newFileName, True
, }9 J# r5 u4 Y. Z0 F" s& } n2 K4 |! A, ], P(欢迎访问老王论坛:laowang.vip)
' 重命名文件8 _% H$ f; T9 A. g) s$ O V(欢迎访问老王论坛:laowang.vip)
file.Name = newFileName
0 `% }/ n D8 ~0 V End If
0 n4 e4 n" H/ I: E( w4 T End If3 ?, K1 B% i J0 G) A2 V4 t(欢迎访问老王论坛:laowang.vip)
Next
N7 V @& D/ n, {End Sub
1 l, h! l( B' K4 I Q2 X- O; R. N9 u+ N) F(欢迎访问老王论坛:laowang.vip)
# b1 w. p( ~/ y$ B(欢迎访问老王论坛:laowang.vip)
( _. [6 ?' N. E. j+ N" i(欢迎访问老王论坛:laowang.vip)
|