Пакетное переименование файлов и перемещение в подпапки (которые должны быть созданы)

500
user1769925

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

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

0
Вы пробовали что-нибудь? В PowerShell я думаю, что вам нужно только использовать `.Stubstring (0," - ")` файла `BaseName` и` .Substring (1, "-") `файла` Name`, чтобы начать работу: `Move-Item -Path $ original_file.FullName -Destination" $ ($ (Split-Path -Parent -Path $ original_file.FullName) \ $ ($ original_file.BaseName.Substring (0, "-")) \ $ ($ original_file.Name.Substring (1, "-")) "` flolilolilo 6 лет назад 0
Привет и добро пожаловать в SuperUser. Мы не являемся услугой «пожалуйста, напишите мне сценарий». Если вы поделитесь своими исследованиями, мы поможем вам указать, где что-то не работает должным образом. Решение может быть сделано любым из упомянутых инструментов, которые вы хотите использовать. Для Batch вам захочется заглянуть в команду FOR. LPChip 6 лет назад 2
Привет, спасибо за ваши ответы. Я совершенно некомпетентен с PowerShell, поэтому я ничего там не пробовал. Я знаком с командой FOR в командной строке для создания цикла, но я боролся со строковыми манипуляциями там. user1769925 6 лет назад 0

2 ответа на вопрос

1
LotPings

Скрипт PowerShell:

Get-ChildItem *-*.pdf|Foreach-object { $Dir, $File = $_.Name.Split('-')[0,1] if (!(Test-Path $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
Joe6pack

Легко с 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.