У меня есть папка, полная файлов формата "10389-2001.pdf", то есть сначала пятизначное число, дефис, а затем четырехзначное число. Я хочу переименовать все так, чтобы сам файл назывался "2001.pdf", но чтобы он был перемещен в новую подпапку "10389". Поскольку эта подпапка еще не существует, ее нужно создать.
Я открыт для предложений, как это сделать в командной строке Windows, Powershell или Cygwin.
решение1
Скрипт PowerShell:
Get-ChildItem *-*.pdf|Foreach-object {
$Dir, $File = $_.Name.Split('-')[0,1]
if (!(Test-Path $Dir)){MD $Dir}
$_| Move -Destination ("$Dir\$File")
}
Партия:
@echo off
for /F "Tokens=1* delims=-" %%A in ('Dir /B "*-*.pdf"') do (
If not exist ".\%%A" MD ".\%%A"
Move "%%A-%%B" "%%A\%%B"
)
Дерево до:
> tree /f .
Z:\
10389-2001.pdf
10815-2017.pdf
Дерево после:
> tree /f .
Z:\
├───10389
│ 2001.pdf
│
└───10815
2017.pdf
решение2
Легко с VBS. Скопируйте код в файл с расширением '.vbs'
on Error Resume Next
sFolder = "D:\test\"
dFolder = "D:\test1\"
Set oFSO = CreateObject("Scripting.FileSystemObject")
For Each oFile In oFSO.GetFolder(sFolder).Files
NameParts = split(oFile.Name,"-")
Set f = oFSO.CreateFolder(dFolder & NameParts(0))
set fi = oFSO.GetFile(oFile)
fi.Copy dFolder & NameParts(0) & "\" & NameParts(1)
Next
Настройте исходную и конечную папку. Не забудьте "\" в конце. Конечная папка должна существовать. Quick'n'dirty coded. Только файлы ?????-????? в sourceFolder.