![使用 PowerShell 进行文件管理](https://linux22.com/image/1554557/%E4%BD%BF%E7%94%A8%20PowerShell%20%E8%BF%9B%E8%A1%8C%E6%96%87%E4%BB%B6%E7%AE%A1%E7%90%86.png)
所以,我遇到了一个有趣的问题。
我正在编写一个 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.txt
会xy1.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++
}