马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?免费注册
x
分享一个自己整的批量处理文件后缀名的脚本(以下开始为脚本内代码,可直接复制粘贴使用,也可投币购买):
8 ~' W1 e& ^1 U; n7 v% U
6 x, A" U1 O3 ~5 u$ w, ]+ m; p$ R7 {(欢迎访问老王论坛:laowang.vip)
' 修改文件后缀名.vbs2 j- @+ {3 F G. g/ [& K }(欢迎访问老王论坛:laowang.vip)
'+ Z1 P5 ^) |8 v/ n) Z(欢迎访问老王论坛:laowang.vip)
' 功能说明:
: {4 n( g6 C6 a+ D: q% \) @' 该 VBScript 脚本用于修改当前目录及其子目录中所有文件的后缀名。用户可以指定新的文件后缀名,并且可以选择是否处理子目录中的文件。
7 X6 g, M# \1 u% `7 o U' 如果在同一目录中存在重名文件,脚本会在文件名后添加数字以确保文件名唯一。脚本会跳过后缀名为 .vbs 的文件。8 R5 \. r& O1 r3 Z; M(欢迎访问老王论坛:laowang.vip)
'
9 i: Y* x l+ `- I' H9 a- a' 使用说明:$ v5 Y2 \& @# `% Y(欢迎访问老王论坛:laowang.vip)
' 1. 将此代码保存为 .vbs 文件,例如 `ChangeFileExtension.vbs`。7 e7 L! a2 V, @# r% V/ _(欢迎访问老王论坛:laowang.vip)
' 2. 双击运行脚本或通过命令行运行。
, |8 n3 x5 L+ N6 t1 v. q' n' 3. 脚本会弹出输入框,提示用户输入新的文件后缀名(不包含点)。3 u2 \, O( t. I2 S! v0 i0 m# I(欢迎访问老王论坛:laowang.vip)
' 4. 如果当前目录包含子目录,脚本会询问用户是否也要修改子目录中的文件后缀名。选择“是”以处理子目录中的文件,选择“否”以仅处理当前目录中的文件。0 _5 O( X- N4 J! N; K! c(欢迎访问老王论坛:laowang.vip)
' 5. 脚本会遍历指定目录及其子目录中的所有文件,跳过后缀名为 .vbs 的文件。对于需要重命名的文件,如果遇到重名,脚本会自动在文件名后添加数字(例如 `(1)`, `(2)` 等),仅在当前目录内处理重名。
# _' h& a7 O0 c' 6. 完成后,脚本会弹出消息框提示操作已成功完成。2 w1 J t. b) d6 j* d5 c" u(欢迎访问老王论坛:laowang.vip)
8 N4 k+ u8 Q% P(欢迎访问老王论坛:laowang.vip)
Option Explicit
) z9 c' T( F/ I5 `& e
$ P2 K. u# ^3 v7 C/ H' 获取当前目录的路径
- D2 J& [; W* y- ]. u/ ]/ ADim folderPath
- E+ G) N7 Q4 l1 H |5 E ^+ E3 ofolderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")9 d9 n h- p7 }! ^( d(欢迎访问老王论坛:laowang.vip)
+ V6 r: ~/ D/ D d: u) t3 g' 获取用户输入的新文件后缀名(不包含点)! s' _, N' S; E9 ]; W(欢迎访问老王论坛:laowang.vip)
Dim newExtension
* T$ p' \% D. V- ?newExtension = InputBox("请输入新的文件后缀名(不包含点),例如 'txt',将所有文件的后缀改为该值。", "设置新的文件后缀名")
4 Q/ j% }5 D, F. C% G" E
% ]8 H" O2 j( f$ E' 如果用户取消了输入框,则退出脚本
" z b3 H, f- e. F- }# FIf newExtension = "" Then
; i' `5 j4 W' M9 a3 {1 k/ @9 Y3 d MsgBox "操作已取消。", vbInformation, "信息"! s- g+ J) ?3 r# H! j& k" d(欢迎访问老王论坛:laowang.vip)
WScript.Quit
- u' p# W1 @$ a& j* v G5 i6 Z$ e7 kEnd If* h1 `8 ^1 r; F) X8 D(欢迎访问老王论坛:laowang.vip)
# Q8 \8 j6 F6 G2 e4 |9 ~1 Z* z$ F' 确保新的后缀名不包含点(.)6 t# r2 d9 \5 N) E+ v/ z(欢迎访问老王论坛:laowang.vip)
If InStr(newExtension, ".") > 0 Then
. ~+ A8 z/ g. i4 u* _, [4 T MsgBox "请只输入后缀名,不要包含点(.)。", vbCritical, "错误"
' N' |) }6 g# ?8 N E2 ^. a- a. j WScript.Quit+ t& A' t6 M$ P0 ]' n(欢迎访问老王论坛:laowang.vip)
End If! x. s+ ^: G6 b- x2 z5 B( o" |' ]$ e4 V* U(欢迎访问老王论坛:laowang.vip)
" V2 E2 z& k2 h+ T" @% ?(欢迎访问老王论坛:laowang.vip)
' 创建 FileSystemObject 对象
3 a7 v) P* w; W* pDim fso, folder, subFolder
. R. _+ U/ V8 ]Set fso = CreateObject("Scripting.FileSystemObject")0 |; R6 _" u" `+ _(欢迎访问老王论坛:laowang.vip)
% E( _! R$ L8 u4 M9 n(欢迎访问老王论坛:laowang.vip)
' 获取当前目录的 Folder 对象
( ?' t7 P3 U4 d; W9 ^$ HSet folder = fso.GetFolder(folderPath)2 l4 n0 h! Y9 n: d e( i(欢迎访问老王论坛:laowang.vip)
8 c- p/ d$ h% r0 o) O' 检查当前目录是否包含子目录5 ?- r; p5 ~6 b$ F- k: {* y' ~(欢迎访问老王论坛:laowang.vip)
Dim hasSubFolders: B. t5 v. ^, t$ p, b, y(欢迎访问老王论坛:laowang.vip)
hasSubFolders = folder.SubFolders.Count > 0
) @* Z! y7 ^& C4 E& C) {9 ~6 D7 c2 y. R7 l/ P(欢迎访问老王论坛:laowang.vip)
' 如果当前目录包含子目录,则提示用户是否也要处理子目录中的文件
1 `) k# W: k; k3 l4 o6 x! v' FDim modifySubFolders, ]; V( _* y2 }% K7 r(欢迎访问老王论坛:laowang.vip)
If hasSubFolders Then
. f4 Y4 x( ~: h modifySubFolders = MsgBox("当前目录包含子目录。是否也要修改子目录中的文件后缀名?", vbYesNo + vbQuestion, "修改子目录中的文件")
/ M; k* ]# ]" k) B/ ~! a2 dEnd If
0 w/ K/ b% P0 w3 G5 t8 [4 \3 b3 Q0 ]; C* U(欢迎访问老王论坛:laowang.vip)
' 处理当前目录中的所有文件
( L3 U( _4 x* SCall ProcessFiles(folder, newExtension)8 T2 @) L$ {: G; d3 C(欢迎访问老王论坛:laowang.vip)
3 I! p+ [" B" @4 P3 k' 如果用户选择是,并且当前目录包含子目录,则遍历所有子目录并处理其中的文件
& L& }- ?5 }4 ^* f0 {+ HIf hasSubFolders And modifySubFolders = vbYes Then) d* |) H0 _6 X9 o) T9 ?(欢迎访问老王论坛:laowang.vip)
For Each subFolder In folder.SubFolders {$ E1 G4 d- Q6 N7 C/ T3 C(欢迎访问老王论坛:laowang.vip)
Call ProcessFiles(subFolder, newExtension)
- _; v" M) D; a- @& Z9 f* v Next( u. A7 S: V0 c8 X(欢迎访问老王论坛:laowang.vip)
End If
3 l+ C$ o* n0 G2 U6 K4 Z6 A: E& P9 x( r2 K3 v9 o7 J(欢迎访问老王论坛:laowang.vip)
' 提示用户操作完成) }. K) Y6 L; _" ~' L& T% e/ u(欢迎访问老王论坛:laowang.vip)
MsgBox "所有文件的后缀名已成功更改为 '" & newExtension & "'。", vbInformation, "完成") z3 c6 x) W* z/ l6 I9 n; o(欢迎访问老王论坛:laowang.vip)
- z1 ]/ v$ C! {# H+ P" Z+ B# [(欢迎访问老王论坛:laowang.vip)
' 处理指定目录中的文件的子程序. ~/ L ]5 |$ t" v; O! P$ V(欢迎访问老王论坛:laowang.vip)
Sub ProcessFiles(targetFolder, newExtension)
6 r! a) I: y0 N+ d Dim file, oldName, baseName, currentExtension, newName, newFileName, counter
0 u, A' ~+ d: b: T* j1 ]) _7 m Dim nameDict. K1 B W+ ~4 ^ N4 o1 a(欢迎访问老王论坛:laowang.vip)
3 G0 C6 t# |/ s, r: {0 o/ y(欢迎访问老王论坛:laowang.vip)
' 创建一个字典对象,用于存储当前目录内的文件名 F1 p& z6 J2 o2 M$ j8 y, Z) P(欢迎访问老王论坛:laowang.vip)
Set nameDict = CreateObject("Scripting.Dictionary")
7 |! H$ j# u; L3 P/ Y! |
( e# ?( b- y1 b# p3 m8 x* f ' 遍历指定目录下的所有文件
) P% c" f" U7 O5 P7 w$ s+ I3 u For Each file In targetFolder.Files
s: k3 I7 Y* j' Q { ' 跳过后缀名为 .vbs 的文件
! w" f( @- R4 }& k: p$ F% v, @ If LCase(fso.GetExtensionName(file)) <> "vbs" Then
) ?+ W& Z1 b- P ' 获取文件的旧名称、基础名称和当前后缀名# N2 W+ v; r6 ^(欢迎访问老王论坛:laowang.vip)
oldName = file.Name0 S& w0 q i4 I1 P' v(欢迎访问老王论坛:laowang.vip)
baseName = fso.GetBaseName(file)) e( ]' C% d% r% J- G(欢迎访问老王论坛:laowang.vip)
currentExtension = LCase(fso.GetExtensionName(file))
+ F3 Y) Y5 Z2 d0 S/ O
: B& H: S5 n) p, l4 c5 ] ' 如果当前后缀名与新后缀名不同,则进行重命名! x3 |/ R+ I* J+ L) y(欢迎访问老王论坛:laowang.vip)
If currentExtension <> LCase(newExtension) Then+ u2 M6 Q, G- L; c, o1 q8 U(欢迎访问老王论坛:laowang.vip)
' 创建新的文件名
J b) X% y1 B! i3 \ newName = baseName & "." & newExtension- W& j/ x+ ~: F4 c(欢迎访问老王论坛:laowang.vip)
: N( p% X* ?% c3 u1 P, }(欢迎访问老王论坛:laowang.vip)
' 检查是否已有同名文件,如果有,则处理重名9 b$ ?+ z y! F! Z4 R5 p(欢迎访问老王论坛:laowang.vip)
newFileName = newName R" W8 S1 _8 q3 Z1 h9 m \(欢迎访问老王论坛:laowang.vip)
counter = 1- w8 J# l- D5 M6 K7 _(欢迎访问老王论坛:laowang.vip)
' 确保新的文件名唯一
, j4 R/ F, [1 Z: W) v: c( n While nameDict.Exists(newFileName) Or fso.FileExists(targetFolder.Path & "\" & newFileName)
+ z& l B; T* j) Y newFileName = baseName & "(" & counter & ")." & newExtension$ I y7 T- {% l9 p" X3 @(欢迎访问老王论坛:laowang.vip)
counter = counter + 12 I9 c0 V' R7 z" h8 G(欢迎访问老王论坛:laowang.vip)
Wend
' y, Y. b6 X7 q, a/ ?3 @
8 { y* J/ v9 v7 B0 c0 T% A ' 记录新的文件名/ _) X* i- |9 N- Z5 O7 t(欢迎访问老王论坛:laowang.vip)
nameDict.Add newFileName, True
- V' B; p0 }: X8 f
b, i" q ]/ x ' 重命名文件
0 i v' h- E2 P' R* J file.Name = newFileName
4 j, ~% \$ W( Y r* }( Q End If- S3 F1 Z8 w$ `2 \3 R; N0 ^(欢迎访问老王论坛:laowang.vip)
End If
7 U/ S# h2 V+ Z- a" c1 y- X Next
" V1 R v2 d$ m) ?" O* C$ ?End Sub5 t4 `$ R9 \. R- j4 `(欢迎访问老王论坛:laowang.vip)
8 O+ t/ x! |8 `7 y* z7 D+ \+ \(欢迎访问老王论坛:laowang.vip)
6 c5 e$ O! o }/ N& x9 s2 {) r) ~( \1 x(欢迎访问老王论坛:laowang.vip)
|