Перемещение файлов на основе частичного имени - DOS / Batch - PullRequest
1 голос
/ 24 декабря 2011

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

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 буквами в правильную папку.

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

1 Ответ

2 голосов
/ 27 декабря 2011

Прочитайте 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.

...