马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):) |, J I& s- } Y1 v2 ?(欢迎访问老王论坛:laowang.vip)
9 Y# ~/ X4 `# p$ m2 G! ^, m
5 O7 ]4 U" d7 s& [3 F% y- {' 修改文件后缀名.vbs
$ f# D- {, [! s' e" {: P+ P'8 r6 E5 @8 L- q(欢迎访问老王论坛:laowang.vip)
' 功能说明:% N* X; l& E9 D+ j y(欢迎访问老王论坛:laowang.vip)
' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。 _4 ^$ M+ y3 ~# a(欢迎访问老王论坛:laowang.vip)
' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。
* m- K+ F" K2 ~1 F'
' x# `8 `8 h4 C: J: B3 e' 使用说明:) p( }) K" G/ x" c3 b(欢迎访问老王论坛:laowang.vip)
' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。
' a1 }" [5 J- \) s* I- I' 2. 双击运行脚本或通过命令行运行。5 u% J' p7 l x4 |(欢迎访问老王论坛:laowang.vip)
' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。9 D! R U# h# S- i2 G Z; U(欢迎访问老王论坛:laowang.vip)
' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。2 P8 B5 n, z7 v( g1 C(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。& J; @ F9 B: Q% U) e4 {, o8 ~: ?(欢迎访问老王论坛:laowang.vip)
' 6. 完成后,脚本会弹出消息框提示操作已成功完成。
. e& j! M# |4 `7 }$ s* T) R; M9 N h+ E(欢迎访问老王论坛:laowang.vip)
Option Explicit* G. r( X$ {& g' b7 F$ Y(欢迎访问老王论坛:laowang.vip)
1 v; ~" C& |8 u" N- H V, k' k(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的路径1 e8 u( R& t# E(欢迎访问老王论坛:laowang.vip)
Dim folderPath
& j# ]8 l* F' C7 y2 N: Z4 J5 ~folderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")0 ^% J) @; t) M/ T: n: }1 X, {(欢迎访问老王论坛:laowang.vip)
" e3 P) s8 k8 V# M' 获取用户输入的新文件后缀名(不包含点)4 l3 e) f2 j! t' `(欢迎访问老王论坛:laowang.vip)
Dim newExtension
4 u. P9 [1 s7 v' gnewExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")
4 ]" ]! H2 ^! ^( \# N) r0 J k3 s% K" K: }(欢迎访问老王论坛:laowang.vip)
' 如果用户取消了输入框,则退出脚本" g) }& O8 M/ d(欢迎访问老王论坛:laowang.vip)
If newExtension = "" Then6 u. {0 G; R8 G. u( x) j( l9 E(欢迎访问老王论坛:laowang.vip)
MsgBox "操作已取消。", vbInformation, "信息"
; U) E. O) S2 a+ v WScript.Quit7 _9 T Y- v6 o7 B(欢迎访问老王论坛:laowang.vip)
End If
2 S6 z3 f7 t" Q' ]1 j6 t9 D2 \- [) |( }- |(欢迎访问老王论坛:laowang.vip)
' 确保新的后缀名不包含点(.)
) [9 z6 y& h2 N+ ^& y2 X6 pIf InStr(newExtension, ".") > 0 Then8 S, F4 r0 Q# Q i5 F/ V(欢迎访问老王论坛:laowang.vip)
MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"
8 m) A5 u# B; m WScript.Quit7 C, S) n0 P9 a. X4 Q! ]: u& e(欢迎访问老王论坛:laowang.vip)
End If- H' _& }- @' z E% p) _(欢迎访问老王论坛:laowang.vip)
6 x L! E6 d \1 d6 f, ](欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象0 t% U! }) Y& }' ^7 b7 Q4 Z(欢迎访问老王论坛:laowang.vip)
Dim fso, folder, subFolder
" G5 {. Y T X6 ]; _Set fso = CreateObject("Scripting.FileSystemObject")9 z2 @ R P, Q7 p5 ~: D U; _(欢迎访问老王论坛:laowang.vip)
) _1 ^1 O- y8 S+ ]' g5 M(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的 Folder 对象
% s. b% D! u4 a, f, w, M9 l0 XSet folder = fso.GetFolder(folderPath)
" ~; J* H- d8 r5 s5 V& ~5 s/ r2 c
* b3 @6 {/ c8 T+ u4 V' 检查当前目录是否包含子目录" \4 s/ s6 a3 B- [* d& A3 u(欢迎访问老王论坛:laowang.vip)
Dim hasSubFolders/ e* [. N; }: \1 C5 G% ]; v6 t(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 02 e/ | Q8 w+ U& T: ?9 L9 c(欢迎访问老王论坛:laowang.vip)
% e4 a( P; `+ C$ B( d(欢迎访问老王论坛:laowang.vip)
' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件
2 O; Y2 J: Z# e2 s$ L1 _Dim modifySubFolders
, P- O, T# s1 V! i4 W l& s' P2 V' vIf hasSubFolders Then
; X! m1 K, l% r modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")1 `8 B% K! {4 W' \! C1 C6 t(欢迎访问老王论坛:laowang.vip)
End If
$ d2 D: A; y- S$ t5 M: a" L& j. a" a2 E, s6 X2 e. Q(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件3 F3 I; y( [1 x0 F/ p(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension)& X+ Z" m# u/ M( R+ \(欢迎访问老王论坛:laowang.vip)
4 X6 u$ ~1 h, o/ o7 a& O' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件
. x# d/ `5 Q1 C0 I# FIf hasSubFolders And modifySubFolders = vbYes Then
. y+ X9 G( O# _ For Each subFolder In folder.SubFolders
( X* L5 r5 u g Call ProcessFiles(subFolder, newExtension)
6 A0 V1 J" t$ K8 E Q1 K& y- r Next
0 f5 v" i3 ~* ~3 j# iEnd If
+ B& ^2 n! L: f
* x+ B2 g8 N6 ?; V& X' 提示用户操作完成. r8 {, f1 ? c2 U6 v2 }5 t(欢迎访问老王论坛:laowang.vip)
MsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成"
5 i9 A- `% _+ b- ?! T; L# C$ O$ P# }- k/ d( ^(欢迎访问老王论坛:laowang.vip)
' 处理指定目录中的文件的子程序
* ]2 ? h" u: i" _0 fSub ProcessFiles(targetFolder, newExtension)1 `+ q8 v, E! d) s( U9 L4 O% C" a(欢迎访问老王论坛:laowang.vip)
Dim file, oldName, baseName, currentExtension, newName, newFileName, counter
5 m; t2 ~ r8 d% ]/ [ Dim nameDict6 h" V0 w, x6 V* B* {* E* |0 U I4 p- Q(欢迎访问老王论坛:laowang.vip)
" s& ^* B* h; y2 `' n, b(欢迎访问老王论坛:laowang.vip)
' 创建一个字典对象,用于存储当前目录内的文件名5 X$ [/ n: Y# t9 }0 D+ X! ^ q+ f(欢迎访问老王论坛:laowang.vip)
Set nameDict = CreateObject("Scripting.Dictionary")% q' H. E' W- Z! e2 B4 d(欢迎访问老王论坛:laowang.vip)
* b" R) Q/ f' g(欢迎访问老王论坛:laowang.vip)
' 遍历指定目录下的所有文件
6 P4 N8 Z! ^; v3 v4 F: Z3 T For Each file In targetFolder.Files
7 [" `$ L' ?5 m9 d/ j1 ~ ' 跳过后缀名为 .vbs 的文件
: f% ~; k3 }$ w" D2 ?0 \: y If LCase(fso.GetExtensionName(file)) <> "vbs" Then
% J1 e# m$ m8 E0 m ' 获取文件的旧名称、基础名称和当前后缀名
; H) [3 ~: n/ J5 @ oldName = file.Name) n* J% K0 b5 R" x# F. F- ~% v0 Q# T0 ?(欢迎访问老王论坛:laowang.vip)
baseName = fso.GetBaseName(file)( O! g% J6 @ n( N(欢迎访问老王论坛:laowang.vip)
currentExtension = LCase(fso.GetExtensionName(file))
3 _5 w. b* O- Z
. C- k0 W* t; c, ] `$ g ' 如果当前后缀名与新后缀名不同,则进行重命名
" i( x4 T2 C/ Q If currentExtension <> LCase(newExtension) Then" q. i# C4 ~+ S3 X(欢迎访问老王论坛:laowang.vip)
' 创建新的文件名9 s3 Q7 `7 l& y ]7 c" Y- R(欢迎访问老王论坛:laowang.vip)
newName = baseName & "." & newExtension, h: p) S, p$ X* Q7 B(欢迎访问老王论坛:laowang.vip)
; D8 B0 U; k* l, q( l(欢迎访问老王论坛:laowang.vip)
' 检查是否已有同名文件,如果有,则处理重名: I! R. X" @% B( {, ?( N7 q(欢迎访问老王论坛:laowang.vip)
newFileName = newName# J& x. |3 `! Z0 P' O(欢迎访问老王论坛:laowang.vip)
counter = 1
$ L& r9 H+ [8 v! L0 f3 k$ P ' 确保新的文件名唯一& [! D) R0 T! ]2 g" Q# W(欢迎访问老王论坛:laowang.vip)
While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName); z4 G* w& x# G0 S! j(欢迎访问老王论坛:laowang.vip)
newFileName = baseName & "(" & counter & ")." & newExtension
1 f4 e0 Y$ v. I$ {0 a6 ? counter = counter + 1
, ]! K; {% r1 R Wend
4 ] g8 ~) o! I0 m8 U, M; |( ]) ?* e* k(欢迎访问老王论坛:laowang.vip)
' 记录新的文件名: e- Y6 s6 e1 j(欢迎访问老王论坛:laowang.vip)
nameDict.Add newFileName, True
0 L( o8 Z; E8 A; M, h
3 N6 B7 |+ E% y& [- x8 I1 N. \ ' 重命名文件5 c% `* v- W7 `7 q(欢迎访问老王论坛:laowang.vip)
file.Name = newFileName1 F4 }* G R1 j! }/ b6 {, R( e(欢迎访问老王论坛:laowang.vip)
End If1 N3 j9 V; U. y0 L(欢迎访问老王论坛:laowang.vip)
End If
) F* S: D- r. {5 I3 E! a Next
. T: I3 P- R- S, gEnd Sub
8 B% c4 U1 N. v& G4 s P* o) F(欢迎访问老王论坛:laowang.vip)
8 B Y: M( H3 G' u# a
8 x7 ]8 ^2 K. T- F% } |