如何使用PowerShell根据文件名后半段规则移动符合条件的文件
PowerShell按文件名后半段匹配移动文件修改方案
你原来的脚本是截取文件名前半段匹配,要改成匹配后半段(指定后缀结尾),直接修改匹配逻辑即可,以下是可直接使用的修改后脚本:
# 设置源文件夹和目标文件夹路径 $srcpath = "C:\Powershelltest\Source" $dstpath = "C:\Powershelltest\Destination" # 设置需要匹配的文件名后缀列表,这里按你的需求添加Stuff.zip,有多个匹配规则直接加在数组里即可 $filterLists = @("Stuff.zip") # 获取源文件夹下所有子文件 $fileList = Get-ChildItem -Path $srcpath -Force -Recurse -File # 遍历所有文件匹配规则 foreach ($file in $fileList) { foreach($filter in $filterLists) { # 匹配文件名是否以指定后缀结尾,默认不区分大小写,需要区分可以改成$file.Name.EndsWith($filter, [System.StringComparison]::Ordinal) if ($file.Name.EndsWith($filter)) { Move-Item -Path $file.FullName -Destination $dstpath # 匹配成功后跳出当前循环,避免重复匹配 break } } }
主要修改点
- 调整了
$filterLists的配置值,改为你需要匹配的文件名结尾字符串,支持同时配置多个规则,比如需要同时匹配Stuff.zip和things.zip,直接写成@("Stuff.zip", "things.zip")即可 - 删掉了原来截取文件名前半段的逻辑,改用
EndsWith方法直接判断文件名是否以指定字符串结尾,精准匹配后半段 - 新增了
Get-ChildItem的-File参数,只遍历文件,避免匹配到文件夹报错 - 匹配成功后新增break跳出当前循环,减少不必要的遍历
补充说明
如果不需要严格区分大小写的话,也可以把判断条件换成if ($file.Name -like "*$filter"),效果完全一致。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

