我希望编写一个脚本,将名称中带有“ - ”连字符的现有文件夹移动到具有相同名称部分的父文件夹中。
示例:
我想将c:\ 12345-01移动到c:\ 12345 \中,看起来像这样:c:\ 12345 \ 12345-01。
问题是连字符前的字符数不相同,它们在连字符前面的3-6个字符。我在这里和其他地方找到了几个snipets,但它们不起作用,因为它们指定了文件名中的字符数
For Each objFile in objFolder.Files
strName = Left(objFile.Name, 3)
如果所有文件名都是3个字符,这将有效。
这有意义吗?
答案 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])
}