(我试图重写此内容以使其更加清晰)
我有一个数百个文件夹和文件(每个文件夹和文件以ABC开头,然后是数字001-936)的问题,需要将其移动到具有相同名称的单个文件夹中。例如:
C:\folders\ABC001
C:\folders\random\ABC001\
C:\folders\files\ABC001.pdf
C:\folders\ABC002.pdf
C:\folders\ABC002\
C:\folders\needs sorting\ABC002\
我想将所有文件和文件夹移动到同名文件夹:
C:\folders\ABC\ABC001\
C:\folders\ABC\ABC002\
and so on...
但是,有时原始文件夹和/或文件在目标文件夹中会重复(或者可能已经存在,因为文件夹已经存在),因此我希望将其添加到名称(1),(2)等
C:\folders\ABC\ABC001\ABC001\
C:\folders\ABC\ABC001\ABC001 (1)\
C:\folders\ABC\ABC001\ABC001.pdf
C:\folders\ABC\ABC002\ABC002.pdf
C:\folders\ABC\ABC002\ABC002\
C:\folders\ABC\ABC002\ABC002 (1)\
任何帮助将不胜感激,我已经尝试解决了好几个星期(每次我都需要这些文件),但是对于脚本/代码来说是新手。我开始:
for /R "C:\folders" %x in (*abc123*.*) do move "%x" "D:\folders\abc\abc123"
最近的尝试(对其他代码进行少量编辑):
function MoveFileToFolder ([string]$source,[string]$destination){
# get a list of source files
$files = Get-ChildItem -Path $source -Recurse | ?{($_.PSIsContainer)}
# verify if the list of source files is empty
if ($files -ne $null) {
foreach ($file in $files) {
$filename = $file.Name
$filebase = $file.BaseName
$fileext = $file.Extension
# verify if destination file exists
$filenameNU = $filename
if (Test-Path (Join-Path $destination $filename)) {
$n = 0
while ((Test-Path (Join-Path $destination $filenameNU)) -eq $true)
{
$filenameNU = $filebase + "(" + ++$n + ")" + $fileext
}
}
Move-Item $file.FullName (Join-Path $destination $filenameNU)
}
}
}
MoveFileToFolder C:\folders\ C:\folders\abc\abc123
(我会尝试在Powershell中为每个子文件夹运行它,但是跟上它变得非常困难)
感谢您阅读。