我想使用PowerShell将一个匹配的名称文件集(1个作业文件和1个触发器文件,从一个目录移动到另一个目录,只有不同的扩展名)。见下面的例子。
源目录包含job1.zip,job1.trg,job2.zip和job2.trg。我想将匹配的作业名称job1.zip和job1.trg移动到dest1文件夹,只有它是空的,如果没有移动到dest2文件夹。然后循环返回以对job2.zip和job2.trg执行相同的逻辑。我还必须考虑的一件事是Source目录可能只包含job1.zip等待job1.trg被传输。我是PowerShell的新手,并试图让它工作没有成功。有可能吗?
这是我到目前为止所拥有的。我使用IF逻辑将文件移动到每个目标文件夹,但它会移动源目录中的所有文件。
$doirun = (get-childItem "d:\ftproot\pstest\").Count
$filecount = (get-childItem "d:\ftproot\ps2\").Count
if ($doirun -le 1) {exit}
$dir = get-childitem "d:\ftproot\pstest\" | Where-Object {($_.extension -eq ".zip") -or ($_.extension -eq ".trg")}
foreach ($file in $dir)
{
if ($filecount -le 2) {Move-item "d:\ftproot\pstest\$file" "d:\ftproot\ps2\"}
else {Move-item "d:\ftproot\pstest\$file" "d:\ftproot\ps3\"}
}
答案 0 :(得分:2)
未经过广泛测试,但我认为这应该有效:
$jobs = gci d:\ftproot\pstest\* -include *.zip,*.trg |
select -expand basename | sort -unique
$jobs |foreach-object {
if (test-path d:\ftproot\pstest\$_.zip -and test-path d:\ftproot\pstest\$_.trg){
if (test-path d:\ftproot\pstest\ps2\*){
move-item d:\ftproot\pstest\$_.zip d:\ftproot\pstest\ps3
move-item d:\ftproot\pstest\$_.trg d:\ftproot\pstest\ps3
}
else {
move-item d:\ftproot\pstest\$_.zip d:\ftproot\pstest\ps2
move-item d:\ftproot\pstest\$_.trg d:\ftproot\pstest\ps2
}
}