马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):
/ E! ^& j2 m* q: B7 J5 ?6 ?8 m
# I' `+ J" D. l \% v$ G
2 E" ?# _3 U# s E' 修改文件后缀名.vbs$ f* M* Q7 k1 e(欢迎访问老王论坛:laowang.vip)
'
" m( D& A% G# P4 O8 g5 I' 功能说明:
4 C8 b4 E0 `; V8 Q' l4 {" o! a) Y1 i' l' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。 $ L8 U- v2 _% `* s; d(欢迎访问老王论坛:laowang.vip)
' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。# Z' a4 ?/ v; y; M4 s. Q: D# o8 c(欢迎访问老王论坛:laowang.vip)
'
' P5 z- e: s7 f' 使用说明:
' V( c2 l- F4 _! B, f6 J' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。- B. Q# b5 O5 s0 c( y* L(欢迎访问老王论坛:laowang.vip)
' 2. 双击运行脚本或通过命令行运行。
4 j! j, s: l/ J- X6 Q' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。
5 ^' N1 j- Y! X4 v0 h2 J6 k' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。
2 g4 \6 s& B6 s. p9 d) w' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。8 Z3 l1 _$ ?& h5 T(欢迎访问老王论坛:laowang.vip)
' 6. 完成后,脚本会弹出消息框提示操作已成功完成。( R3 A# g+ D3 K) X+ _1 a( U9 @(欢迎访问老王论坛:laowang.vip)
* [: v) I, L, c7 c* D(欢迎访问老王论坛:laowang.vip)
Option Explicit6 d; e, l* A, j4 V7 o* a, P( k(欢迎访问老王论坛:laowang.vip)
7 ^, U9 _% ~0 b7 g+ k4 k" U5 T(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的路径
7 ^5 F1 d: i; j! qDim folderPath% A) X% u5 k) c* O) x/ K, D7 {(欢迎访问老王论坛:laowang.vip)
folderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")7 V6 L. m% z( m. N6 x(欢迎访问老王论坛:laowang.vip)
. l* F! f, q* [" _' 获取用户输入的新文件后缀名(不包含点)0 M3 y4 M' Z3 n, ^: [5 H1 E6 {(欢迎访问老王论坛:laowang.vip)
Dim newExtension( _- _, M1 m, w& L3 K(欢迎访问老王论坛:laowang.vip)
newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")3 T9 g3 n. A9 {. N! K0 c(欢迎访问老王论坛:laowang.vip)
& W7 a* l4 M1 Y N5 ^- S, k8 g' 如果用户取消了输入框,则退出脚本9 L4 l* H L' |9 P5 ~9 I(欢迎访问老王论坛:laowang.vip)
If newExtension = "" Then
" V9 I* t5 j# H, [7 i% w MsgBox "操作已取消。", vbInformation, "信息"
$ k& n* W: @; Y7 v' V. E% ] WScript.Quit
# Y/ [, `% w1 G& ]. HEnd If
: I2 c0 t, Z7 S( c- f4 J7 t
. h5 B4 \8 j! t. a' 确保新的后缀名不包含点(.)
# c9 k5 g9 w* `9 I# r4 kIf InStr(newExtension, ".") > 0 Then
, g- @8 ~0 C$ Z3 U" Q5 O; U MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"
4 G& @, ?% }0 M i' W WScript.Quit$ L T: [" @, t2 K- S! Q(欢迎访问老王论坛:laowang.vip)
End If
9 I% ?' E" R7 u, S2 o1 |% r9 u+ a; H6 I; N" `" h9 E7 e(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象
9 t3 C& q* F& c, RDim fso, folder, subFolder- E# v. f- \! x7 ]! Y(欢迎访问老王论坛:laowang.vip)
Set fso = CreateObject("Scripting.FileSystemObject")0 V) e4 Q( v- G8 ](欢迎访问老王论坛:laowang.vip)
; g3 u2 o; J8 K! Q" P7 e# b' 获取当前目录的 Folder 对象. ^- B; ~0 ^0 \5 d5 }$ R* M, W(欢迎访问老王论坛:laowang.vip)
Set folder = fso.GetFolder(folderPath)% ~4 w/ R3 I0 A% S(欢迎访问老王论坛:laowang.vip)
' C3 ^& } f* c9 _3 X% o' 检查当前目录是否包含子目录+ @6 t2 r8 V, Y+ c0 w1 {7 Y& L2 J1 Z9 n(欢迎访问老王论坛:laowang.vip)
Dim hasSubFolders9 R7 ~3 U3 C5 L; D(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 0
( Y; @4 j/ g% V2 L3 X
' \" ~, [ [) y' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件& {, Z' l) f/ c! V$ D6 @4 V- ~(欢迎访问老王论坛:laowang.vip)
Dim modifySubFolders
+ L$ m, Z/ R) {/ n$ _) P% rIf hasSubFolders Then$ o3 U/ C: T0 @(欢迎访问老王论坛:laowang.vip)
modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
7 v8 ~8 _8 c; F& p; s7 {3 WEnd If
% Y) a3 v9 L, S0 F) Z) _% Z/ g$ Q& G9 a& E; V1 J- H8 x. _) z(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件: p% v0 S6 z4 }3 E& q3 r; X(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension)1 e3 ~( K8 f: t6 |/ X(欢迎访问老王论坛:laowang.vip)
; [0 {3 i f: v+ Y3 ?2 H( T* C' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件" Z' k4 t1 a$ W# `(欢迎访问老王论坛:laowang.vip)
If hasSubFolders And modifySubFolders = vbYes Then
# Z% }* j# U8 a. W, S For Each subFolder In folder.SubFolders: k( k$ B/ T3 P(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(subFolder, newExtension)
) l, X& o G/ v7 x# s8 A0 M5 s Next# g; R/ n$ J8 h$ K/ w(欢迎访问老王论坛:laowang.vip)
End If4 K' M0 f3 X! H6 x: R" A(欢迎访问老王论坛:laowang.vip)
7 T6 k4 t, { `% g% l% D' 提示用户操作完成
4 K8 i4 S' k& S6 e# s+ U/ W! Y/ JMsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"
6 P( a; |5 n; a5 N& n- d
' _& c) W0 Q/ t* s7 e7 l: z' 处理指定目录中的文件的子程序
, b* W7 x. @* uSub ProcessFiles(targetFolder, newExtension)
- \) `' v0 M# ^1 l+ T Dim file, oldName, baseName, currentExtension, newName, newFileName, counter& G) l# S) z, L(欢迎访问老王论坛:laowang.vip)
Dim nameDict
! A, {' n! u7 M5 w: E" |3 O/ K1 R$ ]* T(欢迎访问老王论坛:laowang.vip)
' 创建一个字典对象,用于存储当前目录内的文件名
; s8 d8 B- `' n) v Set nameDict = CreateObject("Scripting.Dictionary")
0 {/ H9 m. Z, _: Z- ~0 c+ u( h* g4 p0 f3 h9 C4 n(欢迎访问老王论坛:laowang.vip)
' 遍历指定目录下的所有文件, [; |% p0 D: g k; ]/ T" M( f(欢迎访问老王论坛:laowang.vip)
For Each file In targetFolder.Files
+ f: x# f s: `0 L6 F" N/ K ' 跳过后缀名为 .vbs 的文件
( J. _4 k3 b8 m* F If LCase(fso.GetExtensionName(file)) <> "vbs" Then
/ F$ [, R/ l: \" ?- U, z ' 获取文件的旧名称、基础名称和当前后缀名
; c% {( j4 D4 J oldName = file.Name
5 x2 ^$ ?7 e0 R3 N; ? F' N baseName = fso.GetBaseName(file)
5 e) W+ B# @( L1 f( I; r* k1 b currentExtension = LCase(fso.GetExtensionName(file))
! j4 N; f/ q4 b) G0 W8 R8 ~$ V: x {! A(欢迎访问老王论坛:laowang.vip)
' 如果当前后缀名与新后缀名不同,则进行重命名, A" d. L8 b2 B/ P, r' Y9 H(欢迎访问老王论坛:laowang.vip)
If currentExtension <> LCase(newExtension) Then
; @- x* O+ D# G ' 创建新的文件名( e- x; c! G1 T* Q" J: y, f B' y' j(欢迎访问老王论坛:laowang.vip)
newName = baseName & "." & newExtension
. V! o3 m( ~( R
}& U- _0 o' H# w- N$ p3 q) ` ' 检查是否已有同名文件,如果有,则处理重名
$ J/ I) W2 A# D6 A6 b newFileName = newName
" f8 ]5 ]) T! {5 V& B" p9 [ counter = 1
. K& F% f( `# I% Y6 A1 W ' 确保新的文件名唯一
8 \$ G- E/ n9 o4 r8 P1 Q While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)
3 f/ H7 C. d" [7 I* j8 A! m newFileName = baseName & "(" & counter & ")." & newExtension
1 T; ]! _% c0 Z o8 {' q1 G counter = counter + 1: ~5 f/ E, L- H! f(欢迎访问老王论坛:laowang.vip)
Wend2 A/ J4 Y S! R f(欢迎访问老王论坛:laowang.vip)
0 ]7 f6 S6 A9 f2 c4 } P& s. f(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名
4 _5 D) a0 _2 S nameDict.Add newFileName, True, u* I; l. M3 {1 A O2 @" h w(欢迎访问老王论坛:laowang.vip)
! F5 X( p6 b* I% V ' 重命名文件
9 u& }9 F b! x- K' [& t file.Name = newFileName
5 k+ X- d5 S, }# r7 s" W, J: {3 m End If/ _( x' h4 q: `- _( Z* i( o' y(欢迎访问老王论坛:laowang.vip)
End If: I& k# x/ }9 U( @& S$ Y; m8 k(欢迎访问老王论坛:laowang.vip)
Next- ~' ` e+ c7 j) v1 z* o% E# A3 A: L(欢迎访问老王论坛:laowang.vip)
End Sub' z4 s# T/ C* z(欢迎访问老王论坛:laowang.vip)
2 D& L1 L' g' `( I: p
8 ?! F* ] s& }: b1 F) u
- m6 p: {' q7 {/ A% f4 v |