马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):1 j$ X3 J3 u% M% S, k5 ?6 C(欢迎访问老王论坛:laowang.vip)
* f, D0 x b$ |1 i4 t8 M(欢迎访问老王论坛:laowang.vip)
( {" o: a/ {- ^+ i- @9 |( Y(欢迎访问老王论坛:laowang.vip)
' 修改文件后缀名.vbs
5 n7 D1 f; l& K) u# R( {'% }, k1 e/ i6 `9 l(欢迎访问老王论坛:laowang.vip)
' 功能说明:
3 @2 c, p6 u2 K, ]% T' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。 , n2 t, f- G) w( ?1 c- P; y- f) k& V(欢迎访问老王论坛:laowang.vip)
' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。# K2 L! R+ u6 t, d: ^4 ~3 F(欢迎访问老王论坛:laowang.vip)
'7 p' C4 P) s! _1 j, z" R! Z" \(欢迎访问老王论坛:laowang.vip)
' 使用说明:: W% W7 m0 Q5 B(欢迎访问老王论坛:laowang.vip)
' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。
& d3 K6 P; ]- O7 Y V' 2. 双击运行脚本或通过命令行运行。
u7 e4 I$ G7 ~% p$ H$ u' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。
, Z, r/ ^" U: V& _' X' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。! q& n- a7 b2 g _$ R3 k1 C(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。
3 F: w4 G) k; S5 [$ F9 e2 w! {' 6. 完成后,脚本会弹出消息框提示操作已成功完成。
4 {$ [1 E5 u) v4 w
2 }2 C ^7 v- }3 L6 R' _6 A& kOption Explicit) |+ C; n C# I/ i(欢迎访问老王论坛:laowang.vip)
) y; A4 C; q% q b0 M(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的路径
% ^" A/ k6 T XDim folderPath* Y. d- o9 D# y7 W(欢迎访问老王论坛:laowang.vip)
folderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")) A: o, X/ O- A. y2 A5 z, z+ w- ?% i/ t(欢迎访问老王论坛:laowang.vip)
+ E- R2 k8 S" Z9 `& n(欢迎访问老王论坛:laowang.vip)
' 获取用户输入的新文件后缀名(不包含点)
+ c1 u7 z& ^5 b. U1 ]Dim newExtension
I: O. N% c: v InewExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")7 i9 m" I9 Q0 x; O% Z; x3 O(欢迎访问老王论坛:laowang.vip)
* R5 d! K8 e+ z E, X' 如果用户取消了输入框,则退出脚本: B8 d7 O; ^) q( p& v: `: n' g(欢迎访问老王论坛:laowang.vip)
If newExtension = "" Then
6 ~/ o- \, [; Y! [! S: | MsgBox "操作已取消。", vbInformation, "信息"
( Z# m5 I. ?8 y8 [5 W WScript.Quit0 L! i5 C: l/ U e( F: e H* h(欢迎访问老王论坛:laowang.vip)
End If
2 l& `5 M' {% [; P3 K7 j
' {. M- q! `, R8 D8 N* @& {! J' 确保新的后缀名不包含点(.)
; E+ \4 l" K2 T9 @. z8 g' a% f2 H vIf InStr(newExtension, ".") > 0 Then
* ?) S0 U7 @1 P( y MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"5 D8 J3 P/ B) F* K2 j, j" M1 G(欢迎访问老王论坛:laowang.vip)
WScript.Quit
! a# D& k! V" @1 H+ R! AEnd If
! m+ w/ j8 {2 i+ c1 \: F9 V( h" u
' L2 Z& J4 \- u" X' 创建 FileSystemObject 对象) t% H$ w* [! K* r/ |: h(欢迎访问老王论坛:laowang.vip)
Dim fso, folder, subFolder
f/ D* Z; q/ K% f6 XSet fso = CreateObject("Scripting.FileSystemObject"), e- @: V. @& z3 Q* s3 i(欢迎访问老王论坛:laowang.vip)
# a# o( V# v4 Y: {8 j# P(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的 Folder 对象
8 F3 B4 S y5 k; w5 H2 ESet folder = fso.GetFolder(folderPath)
7 w6 {! F$ W( N9 r( o ]! A+ d
9 y! ^5 E* O; u' 检查当前目录是否包含子目录
* D1 G8 K( |5 \5 G" r/ `Dim hasSubFolders% {% w2 M# V2 {$ q J4 d( n(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 0
) M* G- D3 D. f7 C( v
' F7 Q- W0 P! p, h5 B5 G' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件' N/ r" Q- P1 d, @& `& y(欢迎访问老王论坛:laowang.vip)
Dim modifySubFolders) \% _* I( L8 U$ _' g4 P(欢迎访问老王论坛:laowang.vip)
If hasSubFolders Then
' g2 Z# u. h- E modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
) |5 g. l1 R4 ]* x' n0 ^End If% ` U! H& n' b& b2 x. j8 e# W(欢迎访问老王论坛:laowang.vip)
/ e: z v# d4 [) y) i(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件- p: [4 _/ I$ b7 ]! L1 Y0 b(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension)
6 o$ K W! v/ |) V8 p( Z7 a. B6 d6 a: V7 S# F8 K' X(欢迎访问老王论坛:laowang.vip)
' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件: Q9 v) Y9 U6 d9 ~( i- H; A2 H(欢迎访问老王论坛:laowang.vip)
If hasSubFolders And modifySubFolders = vbYes Then, z4 q# ? t" H) X(欢迎访问老王论坛:laowang.vip)
For Each subFolder In folder.SubFolders1 l/ f0 d; x6 A(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(subFolder, newExtension)( F* E z" M w& P(欢迎访问老王论坛:laowang.vip)
Next
7 B. T2 y! z3 k- ?2 ]6 hEnd If! J t- v$ V: [, r( ^( J! e(欢迎访问老王论坛:laowang.vip)
% Z; |$ z( ?) ~* S1 ]' 提示用户操作完成* T- y% |9 l. i! n" A- d4 `(欢迎访问老王论坛:laowang.vip)
MsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"; t2 V. p4 g6 `9 R! d(欢迎访问老王论坛:laowang.vip)
' a" d* t" A2 {8 f' 处理指定目录中的文件的子程序
8 s+ V8 H4 Q4 H Z7 w* aSub ProcessFiles(targetFolder, newExtension)
3 X- F6 y, ^& f# w Dim file, oldName, baseName, currentExtension, newName, newFileName, counter. M8 {1 }( E: v! e) o+ g4 s(欢迎访问老王论坛:laowang.vip)
Dim nameDict
: n3 J/ _3 }, J7 S1 @
0 D7 v& a' j4 b" [3 D ' 创建一个字典对象,用于存储当前目录内的文件名
. h. ?7 O) X% F+ ~. z2 F Set nameDict = CreateObject("Scripting.Dictionary")
# r2 n# q2 ?3 }* r0 u9 h$ ]" X P3 c- R! }/ P# n(欢迎访问老王论坛:laowang.vip)
' 遍历指定目录下的所有文件) h) s- D# @/ R2 T* x' t/ h(欢迎访问老王论坛:laowang.vip)
For Each file In targetFolder.Files4 _" r4 `- M q8 K: |; _0 H(欢迎访问老王论坛:laowang.vip)
' 跳过后缀名为 .vbs 的文件6 O* ~: j4 }% a- Y+ U' U(欢迎访问老王论坛:laowang.vip)
If LCase(fso.GetExtensionName(file)) <> "vbs" Then6 r# e0 K6 [ t" S% u(欢迎访问老王论坛:laowang.vip)
' 获取文件的旧名称、基础名称和当前后缀名
9 ~3 ?* S- {7 Y# ]) W. P' I6 i/ T oldName = file.Name
9 k/ S4 p# u2 N* W( f baseName = fso.GetBaseName(file)
) q5 `) W s3 e" h currentExtension = LCase(fso.GetExtensionName(file))
- S$ e' \- m; C; k5 h
( y& q' b5 T* m- v ' 如果当前后缀名与新后缀名不同,则进行重命名/ J+ [/ l# u! K- W, n0 ~(欢迎访问老王论坛:laowang.vip)
If currentExtension <> LCase(newExtension) Then p; n6 ?' o8 x) p/ d' ^(欢迎访问老王论坛:laowang.vip)
' 创建新的文件名
2 e' {0 C7 S9 Q newName = baseName & "." & newExtension* F0 y% B& K# `1 G& H(欢迎访问老王论坛:laowang.vip)
+ `3 x. J; N1 d4 Z& c(欢迎访问老王论坛:laowang.vip)
' 检查是否已有同名文件,如果有,则处理重名) \* z% r# o, U(欢迎访问老王论坛:laowang.vip)
newFileName = newName+ q9 k+ g6 k' r9 V) c3 I5 n(欢迎访问老王论坛:laowang.vip)
counter = 1$ n8 W v/ G8 [4 ^/ S- r" ?(欢迎访问老王论坛:laowang.vip)
' 确保新的文件名唯一+ F* s9 m; K1 i: k(欢迎访问老王论坛:laowang.vip)
While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)
! j- a' J4 X _' R, i, R$ W newFileName = baseName & "(" & counter & ")." & newExtension0 f8 Q! ]9 q" S0 y; a$ |(欢迎访问老王论坛:laowang.vip)
counter = counter + 1
* `0 {/ j5 {6 x/ m3 P& b- s* r) H Wend
/ X8 g' Z% ]4 p9 A" w! w+ {5 g/ l r& ~2 g. {2 c/ r* E% n(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名
$ a: {( U% o8 U. d; Q' F% J nameDict.Add newFileName, True
/ c9 V* K( `% T8 b4 y" J1 Z8 g' J C& E(欢迎访问老王论坛:laowang.vip)
' 重命名文件
3 @3 @5 F+ x2 u, Q file.Name = newFileName0 S; K3 v, p% H4 k; [+ Y- v(欢迎访问老王论坛:laowang.vip)
End If
( O; q9 L& E1 \5 _' I1 D: _5 ?5 v End If
) t9 z& A! J1 F8 y0 F( S* ?/ B Next
I; d$ |% m, A9 N6 T" n3 @: QEnd Sub, A8 N/ }2 a- v* n* V5 H! D) r(欢迎访问老王论坛:laowang.vip)
; D' M O* w' w) \" y/ q R(欢迎访问老王论坛:laowang.vip)
$ N1 f0 D0 M: p! q, b+ X7 u( d# i5 W9 C# x; g8 {, a6 L(欢迎访问老王论坛:laowang.vip)
|