昨晚我在中国电脑俱乐部看到了一个和批处理有关的问题
作者的原话如下:
求一个关于文件批量改名简单的程序(在线等)
情况是这样的:我现在工作需要处理些图片,把图片分类放在许多文件夹里,然后在把每个文件夹里的图片加序号改名,比如一个文件夹名字为AAA111,里面有3个图片,就要把这3图片名字改为AAA111-01,AAA111-02,AAA111-03.我想大致就是把文件名提取,然后在.......真后悔读书的时候没好好掌握一门语言,哎~
前些天图片数量少,我用个更名软件还能应付,最近每天4,5千张,实在是弄不了了,路过的朋友帮帮忙撒.我QQ7885347
当时我也想用批处理解决但是一下想不到怎么提取目录名
就用VBS写了一个
代码如下:
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
const WindowsFolder=0,SystemFolder=1,TemporaryFolder=2
Set fs = CreateObject("Scripting.FileSystemObject")
Set ws = CreateObject("Wscript.Shell")
set sys = fs.GetSpecialFolder(SystemFolder)
sum = 0
call input()
private sub input()
dim str
str=InputBox( "请输入你要搜索的路径,程序" & vbnewline & "会搜索指定路径的所有子路径","目标目录")
if str <> "" then
if fs.FolderExists(str) then
call search(str)
else
Msgbox "请输入正确的路径",0,"提示"
call input
end if
else
if msgbox(" 您确定退出本程序吗?",4,"提示")=vbyes then wscript.quit
call input
end if
end sub
Function search(path1)
dim f1,f2,subfolder,path2,path2file,path2files,renname,foldername,appfile,appfiles,i,j,appfilename,appfilesname
if right(path1,1) <> "\" then path1 = path1 & "\"
Set f = fs.GetFolder(path1)
set appfiles = f.files
for each appfile in appfiles
appfilename = path1 & appfile.name
For j = Len(f) To 1 Step -1 '这里至关重要
If InStr("\", Mid(f, j, 1)) Then Exit For
Next
appfilesname = Mid(f, j + 1, Len(f) - j) '分离出目录名
if Lcase(fs.GetExtensionName(appfilename)) = "jpg" or Lcase(fs.GetExtensionName(appfilename)) = "bmp" then
ws.run "cmd /c ren " & appfilename & " " & appfilesname & fs.GetBaseName(appfilename) & "-" & sum & "." &
fs.GetExtensionName(appfilename),0,true
sum = sum + 1
end if
next
sum = 0
Set sf = f.SubFolders
For Each f1 in sf
f2 = path1 & f1.name & "\"
set path2 = fs.getfolder(f2)
set path2file = path2.files
for each path2files in path2file
renname = f2 & path2files.name
foldername = fs.GetParentFolderName(renname)
For i = Len(foldername) To 1 Step -1
If InStr("\", Mid(foldername, i, 1)) Then Exit For
Next
foldername = Mid(foldername, i + 1, Len(foldername) - i)
if Lcase(fs.GetExtensionName(renname)) = "jpg" or Lcase(fs.GetExtensionName(renname)) = "bmp" then
ws.run "cmd /c ren " & renname & " " & foldername & fs.GetBaseName(renname) & "-" & sum & "." & fs.GetExtensionName(renname),0,true
sum = sum + 1
end if
next
sum = 0
search(f2)
next
End Function
msgbox "完成操作",0,"提示"
谁能给出批处理代码:
[ Last edited by willsort on 2005-12-9 at 16:09 ]
作者的原话如下:
求一个关于文件批量改名简单的程序(在线等)
情况是这样的:我现在工作需要处理些图片,把图片分类放在许多文件夹里,然后在把每个文件夹里的图片加序号改名,比如一个文件夹名字为AAA111,里面有3个图片,就要把这3图片名字改为AAA111-01,AAA111-02,AAA111-03.我想大致就是把文件名提取,然后在.......真后悔读书的时候没好好掌握一门语言,哎~
前些天图片数量少,我用个更名软件还能应付,最近每天4,5千张,实在是弄不了了,路过的朋友帮帮忙撒.我QQ7885347
当时我也想用批处理解决但是一下想不到怎么提取目录名
就用VBS写了一个
代码如下:
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
const WindowsFolder=0,SystemFolder=1,TemporaryFolder=2
Set fs = CreateObject("Scripting.FileSystemObject")
Set ws = CreateObject("Wscript.Shell")
set sys = fs.GetSpecialFolder(SystemFolder)
sum = 0
call input()
private sub input()
dim str
str=InputBox( "请输入你要搜索的路径,程序" & vbnewline & "会搜索指定路径的所有子路径","目标目录")
if str <> "" then
if fs.FolderExists(str) then
call search(str)
else
Msgbox "请输入正确的路径",0,"提示"
call input
end if
else
if msgbox(" 您确定退出本程序吗?",4,"提示")=vbyes then wscript.quit
call input
end if
end sub
Function search(path1)
dim f1,f2,subfolder,path2,path2file,path2files,renname,foldername,appfile,appfiles,i,j,appfilename,appfilesname
if right(path1,1) <> "\" then path1 = path1 & "\"
Set f = fs.GetFolder(path1)
set appfiles = f.files
for each appfile in appfiles
appfilename = path1 & appfile.name
For j = Len(f) To 1 Step -1 '这里至关重要
If InStr("\", Mid(f, j, 1)) Then Exit For
Next
appfilesname = Mid(f, j + 1, Len(f) - j) '分离出目录名
if Lcase(fs.GetExtensionName(appfilename)) = "jpg" or Lcase(fs.GetExtensionName(appfilename)) = "bmp" then
ws.run "cmd /c ren " & appfilename & " " & appfilesname & fs.GetBaseName(appfilename) & "-" & sum & "." &
fs.GetExtensionName(appfilename),0,true
sum = sum + 1
end if
next
sum = 0
Set sf = f.SubFolders
For Each f1 in sf
f2 = path1 & f1.name & "\"
set path2 = fs.getfolder(f2)
set path2file = path2.files
for each path2files in path2file
renname = f2 & path2files.name
foldername = fs.GetParentFolderName(renname)
For i = Len(foldername) To 1 Step -1
If InStr("\", Mid(foldername, i, 1)) Then Exit For
Next
foldername = Mid(foldername, i + 1, Len(foldername) - i)
if Lcase(fs.GetExtensionName(renname)) = "jpg" or Lcase(fs.GetExtensionName(renname)) = "bmp" then
ws.run "cmd /c ren " & renname & " " & foldername & fs.GetBaseName(renname) & "-" & sum & "." & fs.GetExtensionName(renname),0,true
sum = sum + 1
end if
next
sum = 0
search(f2)
next
End Function
msgbox "完成操作",0,"提示"
谁能给出批处理代码:
[ Last edited by willsort on 2005-12-9 at 16:09 ]
http://www.msfans.net/bbs/

