У меня есть папка с файлами формата «10389-2001.pdf», поэтому сначала пятизначное число, дефис, а затем четырехзначное число. Я хочу переименовать все, чтобы только сам файл назывался «2001.pdf», но чтобы он был перемещен в новую подпапку "10389". Поскольку эта подпапка еще не существует, ее необходимо создать.

Я открыт для предложений о том, как сделать это в командной строке Windows, Powershell или Cygwin.

2 ответа2

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
-1

Легко с 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 закодированы. Только ?????-????? файлы в sourceFolder.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .