我想使用模式一次完成所有8k +文件,因为文件的左边5个字符与要移动到的子目录的右边5匹配。
这是一个接一个的工作:
move-item -path X:\"Property Files"\05165*.pdf -destination X:\"Property Files"\"* -- 05165";
move-item -path X:\"Property Files"\05164*.pdf -destination X:\"Property Files"\"* -- 05164";
提前感谢您的帮助。
答案 0 :(得分:0)
好的,你在这里使用整个RegEx标签的正确路径。我所做的是查找所有内容,直到最后一个反斜杠,然后捕获5个数字,然后所有不是反斜杠直到行结束,并且只返回捕获的组。我将其设置为变量$ItemNumber
,并在目标中使用它。我在目标源文件夹中的所有内容的ForEach循环上运行它。这是我最终得到的代码:
ForEach($File in (GCI "X:\Property Files\*.PDF")){
$ItemNumber = $File.Fullname -replace ".+?\\(\d{5})[^\\]*$", "`$1"
move-item -path X:\"Property Files"\05165*.pdf -destination X:\"Property Files"\"* -- $ItemNumber"
}
如果你愿意,你可以通过管道来完成这样的事情:
GCI "X:\Property Files\*.PDF"|%{move-item -path X:\"Property Files"\05165*.pdf -destination X:\"Property Files"\"* -- $($_.Fullname -replace ".+?\\(\d{5})[^\\]*$", "`$1")"}
但这有点长,有些人真的不喜欢那么长的单行。
RegEx可以进行测试here,加上它可以将其全部打破。 (链接到regex101.com解释)
答案 1 :(得分:0)
作为单行,假设目标文件夹已存在:
Get-ChildItem "X:\Property Files\*.PDF" |
ForEach { move -path $_ -destination ($_.directoryname +"\* -- "+ $_.Name.substring(0,5))}
仅使用文件名,您只需提取前五个字符(substring(0,5)
),然后将其用作匹配文件夹的末尾。
$_.Directoryname
假设目标文件夹是源路径的子文件夹。