1

Здравствуйте, я пытаюсь сделать скрипт для перемещения почти 3000 изображений в папки, я хочу переместить группу изображений:

Пример имени: 3a19gk-0-00-8hqGWOD

Группа рисунка: 3a19gk, остальное - номер рисунка.

Мне удалось сделать это, но он создает папку для каждой картинки. Любой способ создать папку, принимая только часть имени?

@echo off
setlocal enabledelayedexpansion
set folderpath=D:\path
for %%f in (%folderpath%\*.*) do (
  set "foldername=%%~nf"
  md "!foldername:~0,-3!" >nul 2>&1
  move "%%f" "!foldername:~0,-3!"
) 

2 ответа2

1

Любой способ создать папку, принимая только часть имени?

Вам нужен второй (вложенный) for /f чтобы разобрать первую часть имени.

Должно работать что-то вроде следующего (предупреждение не проверено):

@echo off
setlocal enabledelayedexpansion
set folderpath=D:\path
for %%f in (%folderpath%\*.*) do (
  rem get the folder name up to the first hyphen
  for /f "delims=-" %%g in ("%%f") do (
    set foldername=%%g
    )
  md "!foldername!" >nul 2>&1
  move "%%f" "!foldername!"
  ) 

Дальнейшее чтение

0

Вы можете использовать параметры команды FOR так что вам нужно использовать только одну команду FOR . Это немного сокращает код.

@echo off
pushd D:\path
for /F "tokens=1* delims=-" %%G in ('dir /a-d /b *.*') do (
    md "%%~G" >nul 2>&1
    move "%%~G-%%~H" "%%~G"
)
popd 

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