马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):9 p! r& d+ |* x$ m) C. j- ]# R2 T9 f(欢迎访问老王论坛:laowang.vip)
, T3 J( J* Y+ J5 s( |. G& `(欢迎访问老王论坛:laowang.vip)
2 u; r; \& J4 R; K7 R* _) _; q& q+ `' 修改文件后缀名.vbs$ _5 \! h) T9 ^/ N: T3 G4 \. X(欢迎访问老王论坛:laowang.vip)
'
+ g% i% U" H1 r: U& H' 功能说明:! J) J/ g9 s) p( e/ R(欢迎访问老王论坛:laowang.vip)
' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。
4 ?7 C3 H0 J" @) _" k' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。8 p- O$ ]: s( ^1 f+ p(欢迎访问老王论坛:laowang.vip)
'
, @7 ]2 x% D7 p! P) y' 使用说明:) u$ @0 @+ @& W* g" F0 ~ _(欢迎访问老王论坛:laowang.vip)
' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。
/ U6 g) P, T) N" W: j' 2. 双击运行脚本或通过命令行运行。
+ W, ?' J3 G* d5 F5 Z' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。
* S1 e7 T+ Z8 U; W Q S" C' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。# T2 H- ~: ]5 G* L8 i7 [* x(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。- I# J, O7 ~; [2 c8 r(欢迎访问老王论坛:laowang.vip)
' 6. 完成后,脚本会弹出消息框提示操作已成功完成。' |) v/ D# b# s t(欢迎访问老王论坛:laowang.vip)
- Y$ x2 c! h% R* n6 w' R5 E0 ?Option Explicit& z* a9 s9 b" \- S% e(欢迎访问老王论坛:laowang.vip)
; C9 d; d3 Q; H( @3 P5 B) J K(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的路径2 h# a8 k* Z+ |7 y, ~/ {(欢迎访问老王论坛:laowang.vip)
Dim folderPath
5 ^. I- G1 L; p. p" C6 ffolderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")
& Z: Z' ], E9 D; C1 I% K
( f( G7 o, ]% I/ b4 D- e' 获取用户输入的新文件后缀名(不包含点). f$ N* v& x E9 z(欢迎访问老王论坛:laowang.vip)
Dim newExtension
! k; I4 D$ q2 U- o; A# Y# R, w3 l' UnewExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名"): j- l% U% u- ]/ z* [(欢迎访问老王论坛:laowang.vip)
+ |: ^& O/ g o& c7 m; |$ p' 如果用户取消了输入框,则退出脚本
8 h& s& s1 d! uIf newExtension = "" Then
6 L! S2 T+ E' j- w" R# N5 r MsgBox "操作已取消。", vbInformation, "信息". w0 W# A9 ~$ E# W' A! w6 p% x(欢迎访问老王论坛:laowang.vip)
WScript.Quit
) ?3 U1 u7 O0 dEnd If( ^! N: D1 J Q) ]. {(欢迎访问老王论坛:laowang.vip)
0 |0 l& L7 [! v* U, B8 M3 A' 确保新的后缀名不包含点(.)
a$ ]9 O: ^+ E# ?+ [) ~/ M. c/ @If InStr(newExtension, ".") > 0 Then0 y: [/ k; H, e, C(欢迎访问老王论坛:laowang.vip)
MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"
8 u! s% s; u, z- x+ d$ H: J WScript.Quit
5 ~+ E/ J, R8 y1 h3 t0 Y* bEnd If# g" Z D @7 _! g(欢迎访问老王论坛:laowang.vip)
# _1 w' x2 f4 h$ u5 q(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象
1 r' [" n% c8 l! |! s. n" J2 N b9 v7 y% SDim fso, folder, subFolder
8 _8 S6 P& S3 A* NSet fso = CreateObject("Scripting.FileSystemObject")( |5 h# U/ `+ C, E& b(欢迎访问老王论坛:laowang.vip)
* }& K3 l6 M/ z6 J% W' v(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的 Folder 对象
* [8 e0 D, V+ C1 a; _4 F; kSet folder = fso.GetFolder(folderPath)& E# {8 ]4 s0 F$ g+ B(欢迎访问老王论坛:laowang.vip)
% u2 Q, J' i4 S$ U' 检查当前目录是否包含子目录7 `1 z$ M- U9 [8 ^(欢迎访问老王论坛:laowang.vip)
Dim hasSubFolders! o* l6 _3 H* F3 X+ M(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 0
/ C z/ F! i) I! S
; f; W; t/ W$ z4 K; H$ ^) o5 h' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件
! C4 W) x; |% j* |; b; C. x) ]Dim modifySubFolders* P6 _8 }) _8 a: l(欢迎访问老王论坛:laowang.vip)
If hasSubFolders Then8 r. o* S2 g ?(欢迎访问老王论坛:laowang.vip)
modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件"): w8 b5 w0 ~) V4 p; E b% B(欢迎访问老王论坛:laowang.vip)
End If, R( ]1 i* x5 N) K(欢迎访问老王论坛:laowang.vip)
$ g, I( Y4 w) y5 h6 H V) }(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件
. s* ?5 L! L) ^5 b6 b# aCall ProcessFiles(folder, newExtension)
9 u. F: g0 V- s, U o
0 B0 z% `% A. |5 Q. b( t' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件) o* M" X! \9 C1 B$ m0 i0 h(欢迎访问老王论坛:laowang.vip)
If hasSubFolders And modifySubFolders = vbYes Then
6 a' Z! p% E8 m/ V: @ For Each subFolder In folder.SubFolders9 T2 B2 b+ K$ C: n(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(subFolder, newExtension)
4 |5 e; L" @/ ^4 j- V- F2 M- ?! F Next( x6 D, v9 V8 N: g(欢迎访问老王论坛:laowang.vip)
End If
' G! t" V6 x* t6 x& _# `; d$ L0 A, U' M(欢迎访问老王论坛:laowang.vip)
' 提示用户操作完成' i, P( G3 l3 K j q6 |(欢迎访问老王论坛:laowang.vip)
MsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"& Y9 Y! Z ~8 `% O(欢迎访问老王论坛:laowang.vip)
2 D& E, H |$ Z# n(欢迎访问老王论坛:laowang.vip)
' 处理指定目录中的文件的子程序( o3 E3 S& z- x, t: t(欢迎访问老王论坛:laowang.vip)
Sub ProcessFiles(targetFolder, newExtension)* d0 [+ A5 R: N; y) r6 H! }(欢迎访问老王论坛:laowang.vip)
Dim file, oldName, baseName, currentExtension, newName, newFileName, counter" h# z# x6 U; _6 w& X: D& |9 s) \8 A(欢迎访问老王论坛:laowang.vip)
Dim nameDict, p& G: \& D( J0 I(欢迎访问老王论坛:laowang.vip)
, A9 Z. I6 T0 C& B/ `5 F& i ' 创建一个字典对象,用于存储当前目录内的文件名
3 D9 h9 [6 a7 r Set nameDict = CreateObject("Scripting.Dictionary")& U% Q% \8 T. A6 K(欢迎访问老王论坛:laowang.vip)
" a9 N$ N% y9 l% P& @# ^: p(欢迎访问老王论坛:laowang.vip)
' 遍历指定目录下的所有文件
$ _9 P. `. Y& m+ P' w% W0 Q For Each file In targetFolder.Files: X1 z! @- I0 `, L(欢迎访问老王论坛:laowang.vip)
' 跳过后缀名为 .vbs 的文件! i, T! s, j4 H(欢迎访问老王论坛:laowang.vip)
If LCase(fso.GetExtensionName(file)) <> "vbs" Then e+ Y1 ~0 O9 a" G4 J(欢迎访问老王论坛:laowang.vip)
' 获取文件的旧名称、基础名称和当前后缀名
0 r# r9 \. x7 e. t# `6 E! M" k oldName = file.Name4 O6 [8 p3 q0 J Z; Q# Q(欢迎访问老王论坛:laowang.vip)
baseName = fso.GetBaseName(file)
- d" j' \ A* o6 l% x currentExtension = LCase(fso.GetExtensionName(file))+ i- x/ i, Y5 F1 k: _4 i(欢迎访问老王论坛:laowang.vip)
8 S- l- h/ r" ?" x* V(欢迎访问老王论坛:laowang.vip)
' 如果当前后缀名与新后缀名不同,则进行重命名4 C. q! T/ Q# h% y q3 }( n(欢迎访问老王论坛:laowang.vip)
If currentExtension <> LCase(newExtension) Then f% }5 Y7 E6 n; u+ x% }. L(欢迎访问老王论坛:laowang.vip)
' 创建新的文件名
. m8 k3 z6 Z$ j8 s0 B newName = baseName & "." & newExtension
1 b+ X5 c* S- z( K" Z3 @1 p u, S3 d; i(欢迎访问老王论坛:laowang.vip)
' 检查是否已有同名文件,如果有,则处理重名1 K7 _8 k& W {4 N+ H, c2 }- w(欢迎访问老王论坛:laowang.vip)
newFileName = newName7 |" _# K; S" d8 s' l+ J(欢迎访问老王论坛:laowang.vip)
counter = 1
/ c" W u" T6 M% p* N ' 确保新的文件名唯一. p. P) s: n. T(欢迎访问老王论坛:laowang.vip)
While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)
3 c& A( L+ _/ L: q1 ~. f newFileName = baseName & "(" & counter & ")." & newExtension
1 f- J# U) T2 ~9 ^8 Z, \- f9 p. Q counter = counter + 1, W( M$ m" S# J% x, C) N; g$ m(欢迎访问老王论坛:laowang.vip)
Wend
) B2 r) D( y3 x! {4 O+ _
) q% `* ~2 |0 c( m$ y8 s/ w ' 记录新的文件名+ I6 L5 G+ m9 M0 J y- z( W(欢迎访问老王论坛:laowang.vip)
nameDict.Add newFileName, True
A+ \+ m; }% Q9 e
" h. _$ C2 J/ E( a# Z$ h' n ' 重命名文件& Y/ F( H2 @ ?# J3 {- X(欢迎访问老王论坛:laowang.vip)
file.Name = newFileName& J) Z4 O1 k8 [(欢迎访问老王论坛:laowang.vip)
End If
3 M% X' V1 E, L) J' p End If2 d- P( u# t2 b6 t$ W2 w7 l(欢迎访问老王论坛:laowang.vip)
Next
* i5 [' @5 N6 B5 ~. L+ bEnd Sub) L' p6 @! K( k1 [2 N" x `(欢迎访问老王论坛:laowang.vip)
9 {- b9 C2 ]6 E( P* U; `1 c/ ] f(欢迎访问老王论坛:laowang.vip)
3 O. h& f7 ^) B" c' H$ _( B7 O; [: W: `9 T$ [$ }0 H% X- i$ Q(欢迎访问老王论坛:laowang.vip)
|