马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):5 c! k1 |9 n! y2 ^9 ~: p(欢迎访问老王论坛:laowang.vip)
! ~" h; x7 I3 p4 H& w0 T( G/ B8 Q: t. l(欢迎访问老王论坛:laowang.vip)
' 修改文件后缀名.vbs% X9 v4 i. Z% |! u; W+ Y; u' S(欢迎访问老王论坛:laowang.vip)
'4 z! |0 d! [; v7 C. f(欢迎访问老王论坛:laowang.vip)
' 功能说明:- |3 c, f* g- z: t( r+ r(欢迎访问老王论坛:laowang.vip)
' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。
) I$ A! ^4 M( l; F& K0 B' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。, |' F! I1 Z* w. Y- h8 y(欢迎访问老王论坛:laowang.vip)
'
1 E+ b8 p8 G; C# o. O' 使用说明:4 B3 I5 K5 H: Z3 x9 b(欢迎访问老王论坛:laowang.vip)
' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。
2 f$ `4 |8 Z4 V5 L' 2. 双击运行脚本或通过命令行运行。
* C# i3 X; e9 S: Q( K4 Z' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。
! m5 |0 U8 [7 _' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。0 B' h) K4 t- Q; }" f2 Z(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。4 x# D4 s9 S/ z; x, Q(欢迎访问老王论坛:laowang.vip)
' 6. 完成后,脚本会弹出消息框提示操作已成功完成。: k: O- R$ u, M: k( d9 }; q/ A(欢迎访问老王论坛:laowang.vip)
# D3 T9 e: Q9 P. l6 s7 YOption Explicit' S& ^; c" A3 T# ~) I3 B(欢迎访问老王论坛:laowang.vip)
9 ?5 \6 p( F. H8 A. U* a' 获取当前目录的路径; t! |3 p0 K% L" q9 r# v(欢迎访问老王论坛:laowang.vip)
Dim folderPath
/ J; z! [ A, c9 i0 G* p! AfolderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")
5 V# C% B# |' o" v
0 Q( _" G1 J5 Y2 ~' 获取用户输入的新文件后缀名(不包含点)
- L% A' F! }5 K% u% J% f& P8 lDim newExtension
. @) a& m2 t/ Z* \ o. j w7 I5 znewExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")6 o2 @6 l5 f1 Z& f8 |" m(欢迎访问老王论坛:laowang.vip)
}' b* y' N# n3 D( A1 f0 v/ N(欢迎访问老王论坛:laowang.vip)
' 如果用户取消了输入框,则退出脚本. Y' q9 O3 j6 G6 K9 y9 s7 S; o' Q(欢迎访问老王论坛:laowang.vip)
If newExtension = "" Then' l4 z8 \- {+ i7 Y( K r& I(欢迎访问老王论坛:laowang.vip)
MsgBox "操作已取消。", vbInformation, "信息"
8 _3 `# L5 v0 l+ ]7 j WScript.Quit
' H* E9 ?) e' A* n8 _. N6 Q# k8 ?End If8 z- Y$ K6 E( e4 o(欢迎访问老王论坛:laowang.vip)
1 f5 t- J4 f- x/ M0 a$ ?" u8 J' b- ~' 确保新的后缀名不包含点(.)
; q1 ~! w! H( q2 M: `# zIf InStr(newExtension, ".") > 0 Then
1 `7 h4 J) Z0 P* ^9 `! q4 b% E MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"' r. [ X2 z a4 f# j) B- U(欢迎访问老王论坛:laowang.vip)
WScript.Quit& z! |8 M9 z9 }9 Y* J& X" K(欢迎访问老王论坛:laowang.vip)
End If
! G1 F, ^& k- h% [1 Y. _* o k& T+ s% _6 K" ~7 \(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象3 X. A8 h5 [: a: K( g(欢迎访问老王论坛:laowang.vip)
Dim fso, folder, subFolder
9 r; S9 X7 v; `0 b1 K$ VSet fso = CreateObject("Scripting.FileSystemObject")
4 o- k. t0 u( `2 b8 D7 R
" n4 e- {. { T, n' 获取当前目录的 Folder 对象
5 [7 h _# o- J9 b DSet folder = fso.GetFolder(folderPath)
6 p& [# O& E! _3 L- U! w5 J+ M0 I* ?7 D4 {, s J9 z# a9 W& k(欢迎访问老王论坛:laowang.vip)
' 检查当前目录是否包含子目录
+ y7 L7 F4 j% l) a1 p7 x3 o2 h6 T" QDim hasSubFolders
5 D( L$ U: S1 ^- d& AhasSubFolders = folder.SubFolders.Count > 0 d9 d3 b) K5 ^- _& g) }% K(欢迎访问老王论坛:laowang.vip)
, m7 \9 o; F( E0 \& m5 q/ o2 e$ q- }(欢迎访问老王论坛:laowang.vip)
' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件9 U, q, U# J1 _3 m3 a$ t& t u(欢迎访问老王论坛:laowang.vip)
Dim modifySubFolders
' z( C5 t3 K/ x+ NIf hasSubFolders Then* H, [# P4 g! D9 P8 v5 }(欢迎访问老王论坛:laowang.vip)
modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件"), h* E* y- j( \9 i" h1 z(欢迎访问老王论坛:laowang.vip)
End If
2 P) _, F, ?8 c7 R M8 L1 d8 C5 t1 ^9 _' {(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件0 K& [8 C& X$ s/ O% @; Q8 U(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(folder, newExtension)
! ^; v$ k, Z8 n2 H3 B0 H- H8 `7 h, {- d(欢迎访问老王论坛:laowang.vip)
' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件
" Z f6 G3 s O% a; ^' D( GIf hasSubFolders And modifySubFolders = vbYes Then
* D( k& F/ g; ] g3 o8 z7 O For Each subFolder In folder.SubFolders% K2 i2 r& F c7 _(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(subFolder, newExtension)/ J7 c0 Z" z+ o* l# k5 C: t(欢迎访问老王论坛:laowang.vip)
Next' n; K. D, y; a& m6 I(欢迎访问老王论坛:laowang.vip)
End If
7 K# A9 B) ]& y" \- @) C. T; \; E; E4 L- S: i8 A(欢迎访问老王论坛:laowang.vip)
' 提示用户操作完成7 j4 u9 k' m \; D# [* ](欢迎访问老王论坛:laowang.vip)
MsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成", Y7 j* y0 R% {- t( [6 w3 y; Y4 H(欢迎访问老王论坛:laowang.vip)
/ G, Y' p8 G: o l(欢迎访问老王论坛:laowang.vip)
' 处理指定目录中的文件的子程序
$ n6 x5 W0 v' a( o9 w$ k# mSub ProcessFiles(targetFolder, newExtension)0 d f) y6 b/ f. K9 L(欢迎访问老王论坛:laowang.vip)
Dim file, oldName, baseName, currentExtension, newName, newFileName, counter8 W1 X2 H1 o G m2 Y6 B) a(欢迎访问老王论坛:laowang.vip)
Dim nameDict9 J1 ~. ]& M3 J5 _(欢迎访问老王论坛:laowang.vip)
* B/ i! o1 U* r7 s6 E# E6 c+ r+ ^, N ' 创建一个字典对象,用于存储当前目录内的文件名" u$ h0 N; G* f1 B& R2 K W3 L(欢迎访问老王论坛:laowang.vip)
Set nameDict = CreateObject("Scripting.Dictionary")& {% V6 q, u& C1 {5 e1 L% K(欢迎访问老王论坛:laowang.vip)
}4 ~' @5 v1 `; }( H' W4 G- v: l(欢迎访问老王论坛:laowang.vip)
' 遍历指定目录下的所有文件
: w0 K" w& e3 v( [ For Each file In targetFolder.Files6 {: {8 C0 h+ @6 z; Y(欢迎访问老王论坛:laowang.vip)
' 跳过后缀名为 .vbs 的文件7 R; ^! @$ _* P$ ^. c4 `& h$ @' E+ ]3 ~(欢迎访问老王论坛:laowang.vip)
If LCase(fso.GetExtensionName(file)) <> "vbs" Then8 Y% V- g! P- o, B. f8 e$ [(欢迎访问老王论坛:laowang.vip)
' 获取文件的旧名称、基础名称和当前后缀名
& E5 ?$ t$ Y. F9 U! ?# |2 H$ X oldName = file.Name
2 E" z- s! C5 L7 {; _! u8 b baseName = fso.GetBaseName(file)) S! ?7 |" `/ P) ^: X4 P(欢迎访问老王论坛:laowang.vip)
currentExtension = LCase(fso.GetExtensionName(file))
9 y/ C; h# T" E! i/ O, I/ c. M# H" G3 ^0 D5 v$ z# p(欢迎访问老王论坛:laowang.vip)
' 如果当前后缀名与新后缀名不同,则进行重命名
1 l5 k4 Q4 y; u/ n) U% B- ^4 H# [ If currentExtension <> LCase(newExtension) Then
( G: b1 Z! z6 L# l9 P ' 创建新的文件名
" m8 ^6 a6 i+ J4 q6 C3 `9 q; s newName = baseName & "." & newExtension
" i( {) c4 y" l" M9 F7 h, B2 [) I4 p8 O* |$ K(欢迎访问老王论坛:laowang.vip)
' 检查是否已有同名文件,如果有,则处理重名
* n! V4 A" a+ R+ ^4 o newFileName = newName1 |( a8 O) y* V3 n/ W$ i, w(欢迎访问老王论坛:laowang.vip)
counter = 1
. ]: M+ }$ Q) t ' 确保新的文件名唯一" u( r* [9 T& @3 P1 m/ f- v(欢迎访问老王论坛:laowang.vip)
While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)) {/ X+ M6 h1 E. ~(欢迎访问老王论坛:laowang.vip)
newFileName = baseName & "(" & counter & ")." & newExtension3 M- k ~, c6 O4 o" i$ d4 q7 K(欢迎访问老王论坛:laowang.vip)
counter = counter + 1* k* Q5 n9 M* Y7 Y" v(欢迎访问老王论坛:laowang.vip)
Wend
- r0 ?6 ^% C1 L3 F, q) b1 y9 {9 O
" y$ m& b: A; x5 f; b ' 记录新的文件名( e1 U! s; w @4 H B(欢迎访问老王论坛:laowang.vip)
nameDict.Add newFileName, True) Q' f/ B; Q) e% a+ u) ~& [1 J2 |& d8 `/ ^(欢迎访问老王论坛:laowang.vip)
. }% b9 E. ?0 \(欢迎访问老王论坛:laowang.vip)
' 重命名文件 M7 T9 `; R) `) u) _ c(欢迎访问老王论坛:laowang.vip)
file.Name = newFileName4 j- \; {! n( ]9 I# [(欢迎访问老王论坛:laowang.vip)
End If' p3 b0 D: I# U; [- i(欢迎访问老王论坛:laowang.vip)
End If
8 y& U0 V( K4 V Next
0 j2 x2 [0 f, B. I# {End Sub+ D3 C+ _3 ^: H) i(欢迎访问老王论坛:laowang.vip)
3 N! |4 x8 j5 }(欢迎访问老王论坛:laowang.vip)
1 x8 g9 [5 z' [" N! p* E* E(欢迎访问老王论坛:laowang.vip)
5 ?( B {4 z8 x% Q. f' Z |