2011-12-24 3 views
1

У меня есть этот кодПеремещение файлов на основе частичного имени - DOS/Batch

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 письмом правильно папка.

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

+0

Возможный дубликат [перемещение файлов в папки с частичными именами] (http://stackoverflow.com/questions/3181953/move-files-to-folders-with-partial-names) –

+1

Возможно, я что-то упустил, но это мне не кажется, что это один и тот же вопрос. OP хочет создать папку с именем, которое сокращает имя файла; в то время как прежний вопрос SO заключался в поиске существующей папки с совпадением имени. –

+0

Я думаю, что вы правы, но я не уверен, что у вас есть обе функции. Если папка существует (она будет), мне нужно, чтобы все файлы с SAME fist 4 chars были перемещены в эту папку. например – Arthor

ответ

2

Read 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 команды.

+0

Спасибо ПА. просто нужно немного больше помочь, я тестировал :) – Arthor

+0

Извините за то, что не так ясно ..... – Arthor

Смежные вопросы