Перемещение файлов на основе частичного имени — DOS/Пакетная обработка

у меня есть этот код

pushd "C:\Folders\"
for %%j in (*) do (
md "%%~nj"
move "%%j" "%%~nj"
)
popd
pause
exit

Это переместит файлы с тем же именем в папку с таким же именем, если папка не существует, будет создана новая папка. Ок, отлично.

У меня проблема в том, что мне нужна та же функция, что и выше, но я только смотрел на первые 4 символа. Например.

1234 - sample.jpg
1234 - sample-sm.jpg
1234 - sample-new.jpg
1234 - sample-right.jpg

1235 - sample.jpg

Файлы 1234 будут перемещены в ту же папку, так как первые 4 символа одинаковы, однако файлы 1235 будут перемещены в новую папку, поскольку первые символы отличаются.

Спасибо


@echo off 
setlocal enabledelayedexpansion
pushd "C:\Folders\"
for %%a in (*) do (
  set fldr=%%~na
  set fldr=!fldr:~0,4!
  md "!fldr!"
  move "%%a" "!fldr!"
)
popd
pause
exit

Однако он создает новые папки с первыми 4 буквами и перемещает файлы в эти созданные папки... Он перемещает все с теми же первыми 4 буквами в правильную папку.

Так что нет, мне не нужно НЕ создавать каталог, а перемещать его в уже созданный каталог.


person Arthor    schedule 24.12.2011    source источник
comment
возможный дубликат переместить файлы в папки с частичными именами   -  person Andriy M    schedule 24.12.2011
comment
Я мог что-то упустить из виду, но мне не кажется, что это один и тот же вопрос. OP хочет создать папку с именем, которое сокращает имя файла; в то время как прежний вопрос SO касался поиска существующей папки с совпадением имени.   -  person PA.    schedule 27.12.2011
comment
Я думаю, что вы правы, но я не думаю, что у вас есть обе функции. Если папка существует (а она будет), мне нужно, чтобы все файлы с ОДНИМ ПЕРВЫМ 4 символом были перемещены в эту папку. например   -  person Arthor    schedule 31.12.2011
comment
Кроме того, я видел код Андрея М, однако имена файлов должны быть одинаковыми... Только первая часть у меня такая же. Я протестировал код. Мне просто нужно посмотреть на первые 4 символа и переместить их в предварительно созданную папку с теми же первыми 4 символами.   -  person Arthor    schedule 31.12.2011


Ответы (1)


Прочтите HELP SET, а затем попробуйте использовать следующий код в качестве отправной точки для создания своего решения...

вам нужно будет справиться с повторяющимися именами, которые могут возникнуть.

@echo off 
setlocal enabledelayedexpansion
for %%a in (*) do (
  set fldr=%%~na
  set fldr=!fldr:~0,4!
  echo md "!fldr!"
  echo move "%%a" "!fldr!"
)

попробуйте, всесторонне протестируйте и удалите команды ECHO.

person PA.    schedule 26.12.2011
comment
Спасибо, ПА. просто нужно немного больше помощи, я тестировал :) - person Arthor; 31.12.2011