powershell 如何将某个扩展名的所有文件移动到另一个文件夹,但保持文件夹结构?

b91juud3  于 2023-08-05  发布在  Shell
关注(0)|答案(1)|浏览(212)

我正在整理我的游戏收藏,但许多游戏都有CD映像文件夹。我创建了一个新的分区来保存cd映像,并希望快速移动它们,而不是必须进入每个文件夹。
现在的例子是这样的:

(D:)
 (FullGameName)
   (Gamename.files...)
   (CD)
     (game.iso)

字符串
我想要的样子:

(D:)
 (FullGameName)
   (Gamename)
     (Gamename.files...)

(E:)
 (FullGameName)
   (CD)
     (game.iso)


我在PowerShell中尝试了一些东西,但我得到的最多的是一个装满CD映像文件的文件夹(没有文件夹树)。我用的是windows 10

a8jjtwal

a8jjtwal1#

此脚本使用带有-Directory参数的Get-ChildItem检索源文件夹中的所有子文件夹。
然后,它遍历每个游戏文件夹,并从文件夹结构中提取完整的游戏名称和游戏名称。
您的目标文件夹路径将根据提供的目录结构使用Join-Path构造。如果目标文件夹不存在,则使用New-Item创建。
接下来,脚本使用Get-ChildItem-Filter以及-File parameters. If a CD image file is found, it is moved to the destination folder using Move-Item`在每个游戏文件夹中搜索.iso文件。

$sourceFolderPath = "D:\Source\Game\Folders"
$destinationFolderPath = "E:\Destination\CD"

# Get all subfolders in the source folder
$gameFolders = Get-ChildItem -Path $sourceFolderPath -Directory

# Loop through each game folder
foreach ($gameFolder in $gameFolders) {
    $fullGameName = $gameFolder.Name
    $gameName = $gameFolder.GetDirectories().Name

    # Construct the destination folder path
    $destinationFolder = Join-Path -Path $destinationFolderPath -ChildPath $fullGameName
    $destinationFolder = Join-Path -Path $destinationFolder -ChildPath "CD"

    # Create the destination folder if it doesn't exist
    if (!(Test-Path -Path $destinationFolder)) {
        New-Item -Path $destinationFolder -ItemType Directory | Out-Null
    }

    # Get the CD image file
    $cdImage = Get-ChildItem -Path $gameFolder.FullName -Filter "*.iso" -File

    # Move the CD image file to the destination folder
    if ($cdImage) {
        Move-Item -Path $cdImage.FullName -Destination $destinationFolder
    }
}

字符串
我用我下载的一些PlayStation ISO在本地测试了这个,并且能够成功地实现我相信你的目标是基于对问题的描述。希望这对你有帮助!

相关问题