在Powershell中创建文件夹和移动文件

时间:2019-12-29 05:36:52

标签: powershell

我见过类似的问题,并将它们用作我在这里尝试做的基础。我有一个包含许多文件的文件夹,这些文件的名称都类似于“作者名称-图书Title.azw”。

我想为每个作者创建子文件夹,并将他们的所有书籍移动到该文件夹​​中。这是我到目前为止的脚本。它成功地为“作者”创建了文件夹,但在移动项上出现了问题,无法找到路径的一部分。

$files = Get-ChildItem -file

foreach ($file in $files){

$title = $file.ToString().Split('-') 
$author = $title[0]
if (!(Test-Path $author))
{
    Write-Output "Creating Folder $author"
    New-Item -ItemType Directory -Force -Path $author
}

Write-Output "Moving $file to $author" 
Move-Item -Path $file -Destination $author -Force
}

2 个答案:

答案 0 :(得分:1)

您必须使用此:


Get-ChildItem -file | foreach {
  $title = $_.ToString().Split('-') 
  $author = $title[0]
  if (!(Test-Path $author))
  {
    Write-Host "Creating Folder $($author)"
    New-Item -ItemType Directory -Force -Path "$author"
   }

  Write-Host "Moving $($_) to $($author)" 
Move-Item -Path "$_" -Destination "$author" -Force
}

您必须将文件路径用双引号引起来。因此您的代码无法正常工作。

答案 1 :(得分:0)

根据我的理解,您希望将目录中的文件移动到子文件夹,其中作者名称用作子文件夹名称。您可以尝试此解决方案以实现此目的。

# Folder which contains files
$Path = "PATH_TO_FILES"

# Make sure path is a directory
if (Test-Path $Path -PathType Container) {

    # Go through each file in folder
    Get-ChildItem -Path $Path | ForEach-Object {

        # Get full path of file
        $filePath = $_.FullName

        # Extract author
        $author = $_.BaseName.Split("-")[0].Trim()

        # Create subfolder if it doesn't exist
        $subFolderPath = Join-Path -Path $Path -ChildPath $author
        if (-not (Test-Path -Path $subFolderPath -PathType Container)) {
            New-Item -Path $subFolderPath -ItemType Directory
        }

        # Move file to subfolder
        Move-Item -Path $filePath -Destination $subFolderPath
    }
}