马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):. @" w' I' a# S# _(欢迎访问老王论坛:laowang.vip)
1 e7 e& n# \1 b% @* C$ x
! V( m. @1 x6 v' 修改文件后缀名.vbs
0 R( S3 K; X e'
5 q; l6 G* T: q7 v, j5 {' p' 功能说明:
! \; W" B8 M2 j; y# _# p7 V; t' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。
- Y9 W% A" ?$ i+ Y7 T$ E- d' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。
3 i+ i6 l G, H4 q* Q'
* X/ b! H3 [. k. R/ E0 [2 \6 C& T' 使用说明:
3 y. c0 D4 r$ ]) x' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。( o! p L8 W2 X4 g. `(欢迎访问老王论坛:laowang.vip)
' 2. 双击运行脚本或通过命令行运行。+ w* P O+ o8 t(欢迎访问老王论坛:laowang.vip)
' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。8 O' L- Y3 b8 G- c( `(欢迎访问老王论坛:laowang.vip)
' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。
! Q9 e: o% p+ \- R* I" J' _* x' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。( S" I+ u- j4 o# J& Z3 c(欢迎访问老王论坛:laowang.vip)
' 6. 完成后,脚本会弹出消息框提示操作已成功完成。
. M: Y9 ^1 H, h6 ~$ e$ s4 N# O9 C) S$ R C) k7 ]9 w5 L9 t(欢迎访问老王论坛:laowang.vip)
Option Explicit
, c$ P; I4 A. l
. n6 T% u# w7 ~ i/ s, E! X: g& n/ U' 获取当前目录的路径
/ @, d7 H: [" u5 C( gDim folderPath* N' K' B. V% l3 T% _" }" p(欢迎访问老王论坛:laowang.vip)
folderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".") g% n& N) `0 s, Q5 a(欢迎访问老王论坛:laowang.vip)
# F* Z/ _; ]8 S l; V5 B8 ]4 l& f' 获取用户输入的新文件后缀名(不包含点)) q$ n% @# [# v* C9 E" c(欢迎访问老王论坛:laowang.vip)
Dim newExtension0 _; O G0 t5 u5 i' ^(欢迎访问老王论坛:laowang.vip)
newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")
0 u8 X6 M8 }0 }3 j; I
3 K+ k1 o) b( z0 s* g! b' 如果用户取消了输入框,则退出脚本
) F7 X: j8 K) i8 r8 _4 }6 e, F+ uIf newExtension = "" Then# P: Z8 G6 G9 f$ q2 A! y3 k(欢迎访问老王论坛:laowang.vip)
MsgBox "操作已取消。", vbInformation, "信息"
; x" g) F z% h. P WScript.Quit# ?2 M1 E3 S3 z6 R: j4 {(欢迎访问老王论坛:laowang.vip)
End If
2 }) N& r- ] u; C. a* r. n6 E. X% G
" V6 X, M! K% R6 @1 N' 确保新的后缀名不包含点(.)
0 m1 q7 B: l3 c6 M8 BIf InStr(newExtension, ".") > 0 Then% D! I. w" D! ~3 I) C! n(欢迎访问老王论坛:laowang.vip)
MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"
% @- q. T2 _5 F8 s8 k; J WScript.Quit
$ H3 `7 M7 D& NEnd If
/ i8 z/ @$ y( d) p1 X, @( T
* k, f' Y7 q& W! x1 U+ q' 创建 FileSystemObject 对象$ L% S6 d# {" X0 |! K- N/ Z(欢迎访问老王论坛:laowang.vip)
Dim fso, folder, subFolder, o: ], ~- B# K m- X) Q+ g( ^+ {5 V! C, A(欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject")3 h! W8 N5 q6 F6 a+ T9 N(欢迎访问老王论坛:laowang.vip)
4 M5 f7 I, Y$ d$ e6 K7 Y6 [8 o' 获取当前目录的 Folder 对象7 O/ A+ i* u9 f(欢迎访问老王论坛:laowang.vip)
Set folder = fso.GetFolder(folderPath)
+ _) }6 P% j: ]* b/ y8 I) W V, E/ g$ x+ j$ f; Y(欢迎访问老王论坛:laowang.vip)
' 检查当前目录是否包含子目录
2 K) K% P8 m: F, C& }Dim hasSubFolders" i; P% G" v1 |2 Q C% p4 x5 z(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 0) f! w4 g& t& K2 m; Z7 A; T8 I5 f4 m(欢迎访问老王论坛:laowang.vip)
. }8 {( [9 B. v3 N6 R2 Q0 r' I+ c/ t' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件; E7 w6 P% L! p" n' C% y0 e(欢迎访问老王论坛:laowang.vip)
Dim modifySubFolders) y4 u) w! P4 ]& ?9 U! c0 N5 Y(欢迎访问老王论坛:laowang.vip)
If hasSubFolders Then0 u+ U0 `6 R( X. y1 ?% y4 r(欢迎访问老王论坛:laowang.vip)
modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
6 U( B. f/ a7 X- n0 U5 dEnd If
7 E* c( U, |% U- L" G
7 ^! p2 {4 ]" C1 i' 处理当前目录中的所有文件! I& D$ j% W( V2 I2 m4 t9 ^- m8 P(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension)
% L! x% \# T. x1 m0 Q( D. I
: D8 R! ]0 i, r6 ]/ v3 Z5 X' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件
) C2 z9 j. t) }, B6 `. V9 AIf hasSubFolders And modifySubFolders = vbYes Then0 a* X) }5 ~: S' z8 F4 r(欢迎访问老王论坛:laowang.vip)
For Each subFolder In folder.SubFolders$ |2 ]$ _+ k4 o# R(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(subFolder, newExtension)
+ l4 _, E' ^( V! P: m5 `/ o Next
6 r8 i; ~3 P0 `- I1 }End If
0 i/ x F1 S( r4 R8 P' ~* T2 a9 V5 [0 V5 j0 m5 @( V2 ]% V(欢迎访问老王论坛:laowang.vip)
' 提示用户操作完成
- e' B; R0 @% pMsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"
2 Q7 j% y8 X7 _, E% B' j' d
: N- K. K: p; {4 b& D5 u4 I' 处理指定目录中的文件的子程序# n& H w7 S: `9 y0 v(欢迎访问老王论坛:laowang.vip)
Sub ProcessFiles(targetFolder, newExtension)0 v# N& a7 `4 j, y* x2 e% g(欢迎访问老王论坛:laowang.vip)
Dim file, oldName, baseName, currentExtension, newName, newFileName, counter; M& i. y8 v% a; C(欢迎访问老王论坛:laowang.vip)
Dim nameDict* E! z) M j8 I" `5 l# ^* ^/ {(欢迎访问老王论坛:laowang.vip)
% Y2 ]( W) I9 g+ n( w(欢迎访问老王论坛:laowang.vip)
' 创建一个字典对象,用于存储当前目录内的文件名5 G5 X5 B. d: I! L(欢迎访问老王论坛:laowang.vip)
Set nameDict = CreateObject("Scripting.Dictionary")3 P+ }& a! X+ I$ ?% h4 p. t5 p8 v(欢迎访问老王论坛:laowang.vip)
+ i4 @: c- f. B3 K! M0 s! }: r ' 遍历指定目录下的所有文件
' H- E; \% m& f+ Q$ m' W, A6 m For Each file In targetFolder.Files# Q) ?0 ]; a8 m$ _6 e(欢迎访问老王论坛:laowang.vip)
' 跳过后缀名为 .vbs 的文件) R; Y2 Z: r! m& z8 R(欢迎访问老王论坛:laowang.vip)
If LCase(fso.GetExtensionName(file)) <> "vbs" Then
. F- k1 `5 K. q' V. R3 { ' 获取文件的旧名称、基础名称和当前后缀名
# [7 p8 n! J! }! V oldName = file.Name3 L& ^- j1 A8 p/ { n6 F0 B) J5 _(欢迎访问老王论坛:laowang.vip)
baseName = fso.GetBaseName(file)1 \. Z0 p% h2 y, X" a(欢迎访问老王论坛:laowang.vip)
currentExtension = LCase(fso.GetExtensionName(file))+ r$ Q" x! f7 v(欢迎访问老王论坛:laowang.vip)
7 B% a- G, B7 ~; _(欢迎访问老王论坛:laowang.vip)
' 如果当前后缀名与新后缀名不同,则进行重命名2 j5 I0 z; w. J* Y0 [& }8 }1 p2 V(欢迎访问老王论坛:laowang.vip)
If currentExtension <> LCase(newExtension) Then) e$ w0 t6 q3 ]: F0 q+ S+ T# W3 K(欢迎访问老王论坛:laowang.vip)
' 创建新的文件名
9 G7 Z5 Y) Q9 Q, q) t3 T J# D8 m newName = baseName & "." & newExtension7 Y8 I0 Z( A+ S1 R(欢迎访问老王论坛:laowang.vip)
; {# k: M* H0 b% Q: h6 V0 R6 I( e) e/ _' @ ' 检查是否已有同名文件,如果有,则处理重名
# k" s0 f5 R$ ?) O( l* k- r newFileName = newName
: }, x5 k% W/ ?$ b2 S; P/ z$ w- x counter = 1
* ^1 c- M4 m. x5 N ' 确保新的文件名唯一
7 e: C: x" ?4 }4 M; g; M" V, D While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)! R% f' |* g! `. F' O h7 M(欢迎访问老王论坛:laowang.vip)
newFileName = baseName & "(" & counter & ")." & newExtension ^2 \" Z9 V+ k1 S# d(欢迎访问老王论坛:laowang.vip)
counter = counter + 1( m4 s# }9 I7 J& g: x+ t9 }(欢迎访问老王论坛:laowang.vip)
Wend
% a' u- K6 u) H; p
4 f$ E3 f3 Q3 d$ D ' 记录新的文件名
. y3 _/ A, x4 B- i nameDict.Add newFileName, True1 k6 T) m r* Y' z* a" l+ F(欢迎访问老王论坛:laowang.vip)
: f4 [" [( ^ d, ]+ A& f(欢迎访问老王论坛:laowang.vip)
' 重命名文件
9 P' e5 ^( Q/ I9 ~% G# S3 x3 u+ R file.Name = newFileName/ @9 u, l: M, d& n" d(欢迎访问老王论坛:laowang.vip)
End If
3 A# w6 t0 z9 P+ X1 X/ O8 B$ ` End If
; ]5 J! w( p- t: \( _5 F Next
, d# H5 j3 P7 S! U1 H- `% v* C) wEnd Sub
' \5 T, L4 E3 P: B3 o
* J! s3 w2 q3 Z1 d# S# c* M8 L
. y- _7 e- A7 T" R; a$ J% d- P7 Q8 `0 O(欢迎访问老王论坛:laowang.vip)
|