Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/24: Рейтинг темы: голосов - 24, средняя оценка - 4.58
isebolit
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 14
#1

Сортировка файлов по расширению

16.10.2012, 13:19. Просмотров 4354. Ответов 6
Метки нет (Все метки)

Здравствуйте, уважаемые пользователи, появилась проблема с написанием bat файла. Задание состоит в следующем: произвести сортировку всех файлов текущего каталога в папки, содержащие расширения файлов. Т.е. если у меня в каталоге имеются файлы с расширением .doc .cpp .dll то после запуска батника в текущем каталоге появятся папки doc cpp и dll, содержащие файлы соответствующих расширений. Имя текущего каталога должно передаваться в качестве параметра. Собственно я дошел до следующего решения, но работает оно только если его вручную прописывать в командной строке:
Bash
1
2
set /P path=%CD%
for %i in (*.*) do (md %~xi move *%~xi %~xi)
При запуске сего кода из bat файла в любом случае приходится вводить текущий каталог, после чего прописываю цикл до команды *%~xi после чего, в командной строке возникает вопрос: Продолжить? Если дописать *%~xi %~xi, то все выйдет корректно. У кого будут какие мысли?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2012, 13:19
Ответы с готовыми решениями:

Сортировка имен файлов по расширению
Здравствуйте! Помогите, не могу решить задачку: Создать командный файл...

Перемещение файлов по расширению
Доброго времени суток. Очень нужна Ваша помощь. Требуется создать bat-ник,...

Распределение файлов по их расширению
Всем привет!) Спасайте!! Нужно создать батник который распределяет разные файлы...

Применить сжатие файлов по расширению
Приветстую К примеру есть кусок скрипта for %%A in (D:\TMP) do (if exist...

Мониторинг файлов по дате создания и расширению
Здравствуйте, есть задача мониторить папку на предмет наличия файлов с...

6
isebolit
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 14
17.10.2012, 13:33  [ТС] #2
Попробовал сделать с записью в текстовый файл всех расширений, но не могу представить как потом исходя из этого организовать нужную мне вещь, если кого интересует код, вот он:
Bash
1
2
3
4
5
set %a% = 0
for /f %%i in ('dir /b') do (for /f %%v (res.txt) do if (%%~xi == %%v) %a% = 1
                if not %a% == 1 echo %%~xi >> res.txt
                %a% = 0)
for /f %%v (res.txt) do xcopy %%v
Неужели ни у кого нет идей?
0
Dragokas
Эксперт WindowsАвтор FAQ
16968 / 7053 / 856
Регистрация: 25.12.2011
Сообщений: 10,862
Записей в блоге: 16
17.10.2012, 15:16 #3
path - плохое имя для пользовательской переменной (в системе уже есть одна - проверьте через свойства моего компьютера, "переменные среды", что Вы ее не повредили).

например, > ... пишем c:\c++

Bash
1
2
3
4
5
6
7
8
9
10
@echo off
setlocal enabledelayedexpansion
set /P folder="%CD%> "
for /f "delims=" %%a in ('dir %folder% /b /a:-d') do (
  set newF=%%~xa
  rem урезаем левый символ (точку) расширения
  set newF=%folder%\!newF:~1!
  if not exist "!newF!" md "!newF!"
  copy /y "%folder%\%%~a" "!newF!\"
)
1
isebolit
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 14
17.10.2012, 17:15  [ТС] #4
Хм... немного исправил Ваш код под свои нужды:
Bash
1
2
3
4
5
6
7
8
9
10
@echo off
setlocal enabledelayedexpansion
set /P folder="%CD%> "
for /f "delims=" %%a in ('dir %folder% /b /a:-d') do (
  set newF=%%~xa
  rem урезаем левый символ (точку) расширения
  set newF=%folder%\!newF:~1!
  if not exist "!newF!" md "!newF!"
  move /y "%folder%\%%~a" "!newF!\"
)
Теперь у меня файлы не просто копируются, а переносятся в нужные каталоги (прошу прощения за неверно сформулированную задачу), но встала следующая проблема. Батник переносит сам себя. Пробовал сделать маску, но ведь получится что сделаю я её для всех файлов с расширением .bat, а нужно чтоб он в каталоге оставлял сам себя. Может быть есть другой путь? Можете дать направление, в котором стоит копать
0
Dragokas
Эксперт WindowsАвтор FAQ
16968 / 7053 / 856
Регистрация: 25.12.2011
Сообщений: 10,862
Записей в блоге: 16
17.10.2012, 20:32 #5
Bash
1
2
3
4
5
6
7
8
9
10
11
@echo off
setlocal enabledelayedexpansion
set /P folder="%CD%> "
for /f "delims=" %%a in ('dir %folder% /b /a:-d') do (
  if "%%~a" neq "%~0" (
    set newF=%%~xa
    rem урезаем левый символ (точку) расширения
    set newF=%folder%\!newF:~1!
    if not exist "!newF!" md "!newF!"
    move /y "%folder%\%%~a" "!newF!\"
))
0
isebolit
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 14
23.10.2012, 08:52  [ТС] #6
Bash
1
2
3
4
5
6
7
8
9
10
@echo off
setlocal enabledelayedexpansion
set /P folder="%CD%> "
for /f "delims=" %%a in ('dir %folder% /b /a:-d') do (
  if "%%~na" neq "%0" (
    set newF=%%~xa
    set newF=%folder%\!newF:~1!
    if not exist "!newF!" md "!newF!"
    move /y "%folder%\%%~a" "!newF!\"
))
Так будет правильнее
0
Dragokas
Эксперт WindowsАвтор FAQ
16968 / 7053 / 856
Регистрация: 25.12.2011
Сообщений: 10,862
Записей в блоге: 16
23.10.2012, 13:17 #7
Неа, вот так:
Bash
5
if "%%~a" neq "%~nx0" (
Имя может попасть одинаковое с батником, а вот расширение добавить нужно обязательно.
1
23.10.2012, 13:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2012, 13:17

Перенос файлов по расширению (более 500), сохраняя структуру каталогов
Добрый день. Скрипт должен перемещать файлы по расширению (больше 500)...

Выборка файлов по расширению, упаковка, отправка адресатам, ведение лога, резервное копирование
Всем привет Сделал следующий батник Он ищет в папке файлы aaa0000bbb*.CNG,...

Запрет записи файлов в папку, по расширению
Добрый день. Прошу подсказать скрипт или bat выполняющий : запрет записи...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru