马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买): s- O) D* I+ m' V# d0 K) t(欢迎访问老王论坛:laowang.vip)
$ E7 I( B3 P! ~
, P* `+ L3 {# H3 t" B' 修改文件后缀名.vbs
' T1 K( q4 M" @4 s'
. F" W: J$ D6 ~9 t' 功能说明:
, K0 }: s1 G8 u( ?0 y7 o' k' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。
! X2 {4 I# u) C! I' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。* T, e5 ^$ ]( D, D, s(欢迎访问老王论坛:laowang.vip)
'
: K; w' f' A; E4 l' 使用说明:$ ^7 T' i; z, E! a4 V; ~( U(欢迎访问老王论坛:laowang.vip)
' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。. X+ K' f- s. W% w! M(欢迎访问老王论坛:laowang.vip)
' 2. 双击运行脚本或通过命令行运行。7 w+ a: H) e8 z5 j- M: o(欢迎访问老王论坛:laowang.vip)
' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。: Q4 o" p) C6 S; c(欢迎访问老王论坛:laowang.vip)
' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。
+ |: }* A6 O1 d1 b5 i' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。. Y" \8 Y5 R; [(欢迎访问老王论坛:laowang.vip)
' 6. 完成后,脚本会弹出消息框提示操作已成功完成。
4 o6 I7 X, M* t9 L+ D! T2 `5 ^5 Y6 L3 a; K) B# c: z8 r, O1 M+ g(欢迎访问老王论坛:laowang.vip)
Option Explicit
5 d- A5 [9 f' E/ I. n; E' o# G9 J' W- s4 T& t; w9 u( B. j(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的路径9 N5 S; m4 J; H(欢迎访问老王论坛:laowang.vip)
Dim folderPath3 s7 Z5 C9 u% v& ^(欢迎访问老王论坛:laowang.vip)
folderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")9 e/ x1 u, P" x7 f. U6 E* i% ^(欢迎访问老王论坛:laowang.vip)
3 N- ]/ N; O1 Y: i7 `' Y' 获取用户输入的新文件后缀名(不包含点)
6 c# z# T! p, tDim newExtension* Y; E. w! l" u8 A4 C: n# h(欢迎访问老王论坛:laowang.vip)
newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名"): o$ f$ o3 m m% V. Q& k; ](欢迎访问老王论坛:laowang.vip)
* w) I" u( i& }. J(欢迎访问老王论坛:laowang.vip)
' 如果用户取消了输入框,则退出脚本
* c' {7 } T7 ]+ ], \! QIf newExtension = "" Then( M0 c% M1 K. r' T(欢迎访问老王论坛:laowang.vip)
MsgBox "操作已取消。", vbInformation, "信息"9 z T& U/ p9 T, ?(欢迎访问老王论坛:laowang.vip)
WScript.Quit# T+ S# F" d" c5 }9 A(欢迎访问老王论坛:laowang.vip)
End If1 B! J' D! U! X5 Q4 m1 y; j/ U(欢迎访问老王论坛:laowang.vip)
2 i; j) _ F4 ?( K. P& V- t" o; G' 确保新的后缀名不包含点(.)
$ z" A1 C) Y* HIf InStr(newExtension, ".") > 0 Then+ [) _/ {, _, r/ |3 N, h( O$ D(欢迎访问老王论坛:laowang.vip)
MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"
1 |5 C4 c, W+ z, F$ G WScript.Quit
* ^' \1 j& _( \6 P" V. f! t2 [# kEnd If! l& n# ~7 n3 V% z, `(欢迎访问老王论坛:laowang.vip)
0 d7 O6 J% |( t% c) N& \' 创建 FileSystemObject 对象
3 D/ V v( P# ~Dim fso, folder, subFolder) H: k+ q( X3 E(欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject") \/ S7 i0 \4 i, [' g$ u! }6 |: W(欢迎访问老王论坛:laowang.vip)
/ ]$ k4 B8 ?* s' 获取当前目录的 Folder 对象
, `; i6 u3 H' P5 X- d/ K4 JSet folder = fso.GetFolder(folderPath)
; p7 O, x8 a5 w6 O7 P3 E
8 |" ]+ Z+ U& j$ |$ Y: V' 检查当前目录是否包含子目录
. ]8 |& {3 j* r; Q$ I2 I& U* E$ mDim hasSubFolders
4 q, L0 o% t& o* K/ F! LhasSubFolders = folder.SubFolders.Count > 0
8 o1 h* ^! y1 d8 [, G
0 p+ h" H6 p# v2 Z# {% y5 `. A: E9 X' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件
+ V; L3 W4 g) P' i3 |. R- Z2 E" eDim modifySubFolders
- j4 `$ F! l# c5 CIf hasSubFolders Then
0 }3 L9 [( m9 w modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
7 L" V8 L2 [% N9 e M& i9 SEnd If0 ^& {$ v$ a" [" V/ n0 g5 ?(欢迎访问老王论坛:laowang.vip)
$ L/ m: a9 C5 ~6 `9 U3 e' 处理当前目录中的所有文件7 H9 a+ H2 Z: u+ R" {4 \(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension)
1 f, b2 W# S! l0 h* b" ]
3 V. Z4 x/ c$ U- |' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件
* q% G4 x) L+ e# Q2 g. ?If hasSubFolders And modifySubFolders = vbYes Then
" z* D/ N! x4 s: c% T For Each subFolder In folder.SubFolders+ s4 `8 P- n9 M* k- j(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(subFolder, newExtension)
7 ]& u* H/ H+ [1 K; {: _. o9 P Next* c1 v2 v2 ~" V2 r(欢迎访问老王论坛:laowang.vip)
End If* R P! t5 `" P7 P' I# {(欢迎访问老王论坛:laowang.vip)
0 T# m9 o0 d2 h' 提示用户操作完成
G4 J- y2 |2 C# pMsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"
* v' v6 C2 r5 }' n# l8 m6 k8 A7 ^4 z(欢迎访问老王论坛:laowang.vip)
' 处理指定目录中的文件的子程序
/ `' r2 G5 }( u2 T- _! E4 R! |% j4 HSub ProcessFiles(targetFolder, newExtension); F; {, {3 V6 ~. g: x/ c+ Z(欢迎访问老王论坛:laowang.vip)
Dim file, oldName, baseName, currentExtension, newName, newFileName, counter
' o0 ]: q/ H* M4 Z! w W3 N Dim nameDict
+ W) u4 r3 |# e V: a, k& r ?3 ~ T8 B8 w8 w5 b(欢迎访问老王论坛:laowang.vip)
' 创建一个字典对象,用于存储当前目录内的文件名
7 Z+ S( ?: r! ^5 h9 s; W" k2 D! J Set nameDict = CreateObject("Scripting.Dictionary")' h( C7 E8 S+ B6 f& D/ I(欢迎访问老王论坛:laowang.vip)
. Z( s! I& K8 t. o" ?( d$ Y( F(欢迎访问老王论坛:laowang.vip)
' 遍历指定目录下的所有文件
+ [: A) C* S4 p, x# P* O1 E For Each file In targetFolder.Files
; {6 E' K4 |" n ' 跳过后缀名为 .vbs 的文件
; a7 T+ Z$ v. u$ c# r5 [+ _ If LCase(fso.GetExtensionName(file)) <> "vbs" Then
. v% E% z* j$ e0 s6 T) q$ D ' 获取文件的旧名称、基础名称和当前后缀名
& D! Y0 Z a H1 h: _! c' [ oldName = file.Name
# ^$ ~! ]: {1 i1 `5 V( s baseName = fso.GetBaseName(file)1 [1 Y# N" N, b) e- W' g(欢迎访问老王论坛:laowang.vip)
currentExtension = LCase(fso.GetExtensionName(file))3 u$ M$ _- E5 R! L* X) k2 g% `(欢迎访问老王论坛:laowang.vip)
$ F3 d6 r/ @6 ~+ }# W(欢迎访问老王论坛:laowang.vip)
' 如果当前后缀名与新后缀名不同,则进行重命名
. e& F" a# S7 t" |" S% e If currentExtension <> LCase(newExtension) Then
" V, _' v" C D# F9 y/ u ' 创建新的文件名6 ~0 @+ e2 [# J(欢迎访问老王论坛:laowang.vip)
newName = baseName & "." & newExtension
9 U$ g2 a* y2 @1 x5 [- d& |
3 m* a+ ]3 g7 {2 ^4 f& Z4 d" G ' 检查是否已有同名文件,如果有,则处理重名
- X0 E# ^1 E+ I2 P newFileName = newName
8 U% R" ~ L8 t1 A8 [ t# L2 s counter = 1
8 ~! Y/ y Z8 t9 g% v ' 确保新的文件名唯一
p2 h( R- X$ V While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)
* I8 G6 e- O0 M newFileName = baseName & "(" & counter & ")." & newExtension
! _1 G2 @1 G/ C) q5 q, d counter = counter + 17 A5 m! n' w: M! m(欢迎访问老王论坛:laowang.vip)
Wend
9 H' {$ e" s) r
$ p! w, W3 }0 U4 d ' 记录新的文件名) f3 W; i8 c$ w, R! B8 M( Q(欢迎访问老王论坛:laowang.vip)
nameDict.Add newFileName, True
m% @8 `: Y, {2 l- S/ E9 N' u* D8 Y$ M7 v; y# ?(欢迎访问老王论坛:laowang.vip)
' 重命名文件# p+ J; A: c7 v5 W(欢迎访问老王论坛:laowang.vip)
file.Name = newFileName
( a! X, X8 ^2 i! }0 Z" \& q/ J End If
! ~) ~& \6 i* ?- H) L/ s0 S' H End If
% {" {2 \5 H7 ^$ U$ x Next2 S1 n! L: ~0 w5 {(欢迎访问老王论坛:laowang.vip)
End Sub
6 u; X( A6 d0 @2 n/ f6 K9 @) d5 H/ u% o! r# _$ V9 p. W8 j(欢迎访问老王论坛:laowang.vip)
c! h+ P* x/ _! [5 U6 }' _# S( M' Q: S(欢迎访问老王论坛:laowang.vip)
w9 d4 |! T+ U8 h" i |