使用 PowerShell 进行文件管理

使用 PowerShell 进行文件管理

所以,我遇到了一个有趣的问题。

我正在编写一个 PowerShell 脚本来检查文件夹“A”中是否存在与文件夹“B”中相同的文件名。如果在文件夹“A”中找到它们,则将它们移动到文件夹“C”。但是,如果文件夹“A”中有多个文件,我需要在将它们移动到文件夹“C”时重命名它们。

$folderA = 'S:\Folder A\' # Folder to remove cross-folder duplicates from
$folderB = 'S:\Folder B\' # Folder to keep the last remaining copies in
Get-ChildItem $folderB | ForEach-Object {
    $pathInA = $folderA + $_.Name
    If (Test-Path $pathInA) {Move-Item $pathInA -Destination 'S:\Folder C\'}
}

它在查找和移动方面表现很好,但在重命名方面表现不佳。有什么建议给我吗?

编辑:抱歉,我应该说明一下。最有用的重命名方式要么是 xy.txt > xy_1.txt .... 要么是 .... xy.txt > xy(1).txt

重命名它们的目的是我们有一个文件结构,我们在其中创建一个带有数字签名的 PDF,作为机器进厂维修的手动收据(文件夹 A)。然后,在工作完成时,它会由技术人员签名,然后保存到另一个文件夹(文件夹 B)。最终由客户在完全不同的位置(文件夹 D)取回。这是另一个签名并保存到该文件夹​​中。一旦它到达文件夹 D,所有其他副本都将毫无用处,因为它们没有所有签名,它们只是残余物。我真的希望这是有意义的,如果没有,请告诉我。

答案1

您还没有提到您想如何重命名您的文件或出于什么目的。不过,这可以解决问题。现在它只会在文件名中添加一个数字。所以xy.txtxy1.txt在新文件夹中等等。

$i = 1
$FolderB = gci "S:\Folder B" | select -expand Name
$FolderA = gci "S:\Folder A" | ? { $_.Name -in $FolderB } | % {  
    Move-Item $_.FullName "S:\Folder C" -PassThru | 
    Rename-Item -NewName ($_.BaseName + $i + $_.Extension)
    $i++
}

相关内容