用于移动具有特定名称和字符的文件夹的脚本

时间:2013-08-12 19:26:20

标签: powershell

我希望编写一个脚本,将名称中带有“ - ”连字符的现有文件夹移动到具有相同名称部分的父文件夹中。

示例:

我想将c:\ 12345-01移动到c:\ 12345 \中,看起来像这样:c:\ 12345 \ 12345-01。

问题是连字符前的字符数不相同,它们在连字符前面的3-6个字符。我在这里和其他地方找到了几个snipets,但它们不起作用,因为它们指定了文件名中的字符数

For Each objFile in objFolder.Files
    strName = Left(objFile.Name, 3)

如果所有文件名都是3个字符,这将有效。

这有意义吗?

2 个答案:

答案 0 :(得分:3)

cd 'C:\Directory\of\folder\where\number\files\located'
gci | ? {$_.PSIsContainer -eq $true} | % { `
    $file = $_.name
    $loc = $file.IndexOf('-')
    $folder = $file.substring(0,$loc)
    New-Item -Path . -ItemType Directory -Name $folder -ErrorAction SilentlyContinue
    move-item $file $folder
}

答案 1 :(得分:3)

您需要在分隔符上拆分名称。如果从C驱动器的根目录运行以下命令,您将获得所需的结构。

Get-ChildItem | where-object {
  ($_.PSIsContainer) -and ($_.Name.contains("-"))
} | foreach-object {
  new-item -itemtype Directory -path $($_.name.split("-")[0])
  move-item $_ -Destination $($_.name.split("-")[0])
}