2013-11-22 2 views
0

Я файлы с различными именами ...Создать папку на основе группы файлов

Tim-01.jpg 
Tim-02.jpg 
Tim-03.jpg 
jack-01.jpg 
jack-02.jpg 
jack-03.jpg etc in a single folder 

Я хочу, чтобы переместить все тим файлов в папке и домкраты файлы Тим Джек папку и т.д.

Может это делать с использованием .bat-файлов? Если да, пожалуйста, поделитесь этим кодом.

Thank you.

+0

Введите 'copy /?' В командной строке. Это все –

ответ

0

EDIT - Изменен код для уменьшения количества перемещений файлов. Теперь все файлы с одним и тем же префиксом перемещаются в одной команде.

@echo off 

    setlocal enableextensions 

    rem source of images 
    set "_dir=." 

    rem for each jpg with a dash in its name 
    for %%f in ("%_dir%\*-*.jpg") do (

     rem if the file still exists (maybe it has been moved) 
     rem then split the file name with the dash as delimiter 
     if exist "%%~ff" for /F "tokens=1 delims=-" %%s in ("%%~nf") do (

      rem and if we get a folder target, move the all the files 
      rem with same prefix to proper folder 
      if not "%%~s"=="" (
       robocopy "%_dir%" "%_dir%\%%~s" "%%~s-*.jpg" /mov /njs /njh 
      ) 
     ) 
    ) 

    endlocal 

EDIT2 - Изменены адаптироваться к комментариям

@echo off 

    setlocal enableextensions enabledelayedexpansion 

    rem source of images 
    set "_dir=." 

    rem for each jpg with a dash in its name 
    for %%f in ("%_dir%\*-??.jpg") do (

     rem if the file still exists (maybe it has been moved) 
     if exist "%%~ff" (

      rem get the filename without the 3 last characters 
      set "_target=%%~nf" 
      set "_target=!_target:~0,-3!" 

      rem and if we get a folder target, move the all the files 
      rem with same prefix to proper folder 
      if not "!_target!"=="" (
       robocopy "%_dir%" "%_dir%\!_target!" "!_target!-??.jpg" /mov /njs /njh 
      ) 
     ) 
    ) 

    endlocal 
+0

Это сработало, но проблем мало. Этот код удаляет все после первого «-». Я хочу удалить только последние 3 символа (-01, -02, -03). Можете ли вы сказать мне, как это можно сделать. Спасибо – user3020621

+0

@ user3020621: Как названы файлы? –

+0

Спасибо за ваш ответ ... Файлы называются jack-home-01.jpg, jack-home-02.jpg, jack-college-party-01.jpg, jack-college-party-02.jpg и т. Д. Мне нужны папки типа jack-home, jack-college-party и т. Д. – user3020621

1
@echo off 
setlocal 
set sourcedir=c:\sourcedir 
for /f "tokens=1*delims=-" %%a in ('dir /b /a-d "%sourcedir%\*-*.*") do (
md "%sourcedir%\%%a" 2>nul 
echo move "%sourcedir\%%a-%%b" "%sourcedir%\%%a\" 
) 

Обратите внимание, что 2>nul подавляет сообщения об ошибке создается, когда предпринимается попытка воссоздать существующий каталог

MOVE является просто ECHO изд. Удалите ключевое слово ECHO, чтобы активировать move. Также может быть разумным добавить >nul в оператор MOVE, чтобы подавить сообщение «1 файл (ы) перенесено».

1

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

@ECHO OFF &SETLOCAL 
for /f "tokens=1*delims=-" %%a in ('dir /b /a-d *-*.jpg') do set "$%%a=%%a" 
for /f "tokens=1*delims==" %%a in ('set $') do robocopy "%cd%" "%cd%\%%b" "%%b*" /mov /l 

Удалить /l из robocopy, чтобы сделать его работу.

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