批处理搜索指定文件列表并复制到指定目录
bat吧
全部回复
仅看楼主
level 10
kingbatsoft 楼主
源码
@璐村惂鐢ㄦ埛_000076K馃惥 off
for /f "delims=" %%a in (list.txt) do (
for /f "delims=" %%b in ('dir /a-d /b /s f:\') do (
set "str=%%~nb"
setlocal enabledelayedexpansion
if not "!str:%%a=!"=="!str!" (endlocal © "%%b" f:\test\LIU\&echo %%b)
endlocal
)
)
pause
效果
其中list.txt是文件列表,具体格式参考(不带扩展名和目录)
别问我为啥做的,问就是朋友要(改了大半天呜呜呜呜)
可能会存在问题(新人垃圾水平凑合看
给相同困扰的朋友一个解脱
2021年03月27日 07点03分 1
level 10
kingbatsoft 楼主
TIPs:
f:\是搜索目录
f:\test\LIU是目标目录
2021年03月27日 07点03分 2
level 10
kingbatsoft 楼主
qwq没人啊[泪]
2021年03月27日 09点03分 3
level 13
ao
2021年03月27日 12点03分 4
level 7
OPTION EXPLICIT
Dim FolderPath,CopyPath,num,b
'需要复制的目录
FolderPath = "C:\Users\Administrator\Desktop\111"
'最终复制的目录
CopyPath = "C:\Users\Administrator\Desktop\222"
GetFiles FolderPath
Msgbox "已成功复制:" & num & " 文件!" & chr(13) & b
Sub GetFiles(path)
Dim objFSO,objGetFolder,objFiles,f
Dim objShell : num = 0
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objGetFolder = objFSO.GetFolder(path)
Set objFiles = objGetFolder.Files
For Each f in objFiles
Set objShell = WScript.CreateObject("WSCript.shell")
objShell.Run "cmd /c copy /y """ & f & """ """ & CopyPath
b = b & f & chr(13)
num = num + 1
Next
Set objFSO = Nothing : Set objGetFolder = Nothing
Set objFiles = Nothing : Set objShell = Nothing
End Sub
再来个VBS版
2021年03月27日 13点03分 5
大佬怎么根据名单来复制粘贴
2021年07月22日 08点07分
level 7
2021年03月27日 13点03分 6
这个貌似只能复制指定文件吧,我这个可以自动搜索所有符合的文件(而且按行搜索,一行一行搜的
2021年03月27日 13点03分
level 10
kingbatsoft 楼主
这种方法的优点是效率高(单个目录超级多文件+指定的文件列表)不用按一个一个文件手动搜索,但同时因为bat是单线程,如果全盘搜索就会很慢,我朋友就是要在指定目录搜索(图纸有十万多),才做的
2021年03月27日 13点03分 7
前言不搭后语,你说是指定的目录搜索,你写的是F:,我那只是一个案例,用来验证一个复制成功,输出总复制成功的数据列表,你说你算法优点是效率高,这不是对牛弹琴吗,你确定你这样的写法效率很高吗
2021年03月28日 04点03分
level 7
OPTION EXPLICIT
Dim IniTextFilePath,CopyFolderPath,TextLines,DrivePath
Dim CopyNum : CopyNum = 0
Dim CopyData
'复制数据的ini文本
IniTextFilePath = "C:\Users\Administrator\Desktop\1.ini"
'最终复制的目录
CopyFolderPath = "C:\Users\Administrator\Desktop\222"
'指定盘符
DrivePath = "C:\Program Files (x86)\Tencent\QQ\"
FileSExists IniTextFilePath
TextLines = GetsTextLines(IniTextFilePath)
Function GetBaseNames(Str)
Dim Name
Name = InStr(1,Str,".",1)
If Name > 0 Then
Name = Name - 1
Name = Left(Str,Name)
GetBaseNames = Name
Else
GetBaseNames = Str
End If
End Function
Sub DriveFilesSearch(drives)
Dim objFSO,objGetFolder,objFiles,f,s
Dim objSubFolders,BaseName
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objGetFolder = objFSO.GetFolder(drives)
Set objFiles = objGetFolder.Files
For Each f in objFiles
BaseName = GetBaseNames(f.name)
HandlingIniFile IniTextFilePath,BaseName,f
Next
Set objSubFolders = objGetFolder.SubFolders
For Each s in objSubFolders
DriveFilesSearch s
Next
Set objFSO = Nothing
Set objGetFolder = Nothing
Set objFiles = Nothing
Set objSubFolders = Nothing
End Sub
DriveFilesSearch DrivePath
Msgbox "已成功复制:" & CopyNum & " 文件!" & chr(13) & CopyData
Function GetsTextLines(File)
Dim objFSO,objOpenFile,ReadAll
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOpenFile = objFSO.OpenTextFile(File,1,0)
ReadAll = objOpenFile.ReadAll
GetsTextLines = CLng(objOpenFile.Line)
objOpenFile.Close
Set objFSO = Nothing
Set objOpenFile = Nothing
End Function
Sub FileSExists(file)
Dim objFSO : Set objFSO = _
CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(file) Then
Set objFSO = Nothing
Exit Sub
Else
Msgbox "不存在INI文本文件!"
Set objFSO = Nothing
Wscript.quit
End If
End Sub
Sub HandlingIniFile(file,fileStr,path)
Dim objFSO,objOpenFile,str,objShell
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objOpenFile = objFSO.OpenTextFile(file,1,0)
Do While objOpenFile.AtEndOfStream <> True
str = CStr(objOpenFile.readLine)
If fileStr = str Then
CopyNum = CopyNum + 1
CopyData = CopyData & path & chr(13)
Set objShell = WScript.CreateObject("WSCript.shell")
objShell.Run "cmd /c copy /y """ & path & """ """ & CopyFolderPath
End If
Loop
Set objFSO = Nothing
Set objOpenFile = Nothing
Set objShell = Nothing
End Sub
在来一个升级版,根据INI文件内容进行复制,这里举例设置搜索路径为QQ的安装目录下
搜索INI文件内指定的字符串,不带后缀名
目标是根据INI文件内容进行在QQ安装目录内的文件进行复制
图片中12345的那个文件,是我自己创建的一个无后缀名的文件
2021年03月28日 05点03分 8
level 7
2021年03月28日 05点03分 9
level 7
如果你懂算法,你可以看见我的算法比你那更加的快速,你的是文本每行去搜索,浪费搜索时间,我的算法是直接先去搜索,对集合中的每个项目进行INI匹配
2021年03月28日 05点03分 10
1