0

我正在寻找一个脚本,它将名称中带有“-”连字符的现有文件夹移动到具有相同名称的部分父文件夹中。

例子:

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

问题是连字符前的字符数不一样,它们在连字符前有3-6个字符。我在这里和其他地方找到了几个很接近的片段,但是它们不起作用,因为它们指定了文件名中的字符数

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

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

这有意义吗?

4

2 回答 2

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
}
于 2013-08-12T20:38:20.850 回答
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])
}
于 2013-08-12T20:41:16.540 回答