|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Перемещение файлов из одной папки в разные в зависимости от имени файла |
|
|
CMD/BAT - [решено] Перемещение файлов из одной папки в разные в зависимости от имени файла
|
|
Новый участник Сообщения: 4 |
Здравствуйте!
Есть набор файлов с именами вида abcdXXXef.ext в папке C:\Folder1. Требуется переместить их в соответствующие подпапки с именами XXX (т.е. с тем же названием), находящиеся в папке C:\Folder2. Например, файл C:\Folder1\abcd123ef.ext надо переместить в папку C:\Folder2\123, файл C:\Folder1\abcd456ef.ext в папку C:\Folder2\456 и т.д. |
|
|
Отправлено: 09:40, 19-09-2011 |
|
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать @echo off
setlocal enabledelayedexpansion
set "dir1=C:\Folder1"
set "dir2=C:\Folder2"
set "ext=*.ext"
pushd "%dir1%" && (
for %%a in (%ext%) do (
set "fn=%%a"
md "%dir2%\!fn:~4,3!" 2>nul
move "%%a" "%dir2%\!fn:~4,3!\"
)
popd
)
|
|
Последний раз редактировалось SendMessage, 19-09-2011 в 14:22. Причина: добавлен скрипт Отправлено: 14:01, 19-09-2011 | #2 |
|
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Я понял задачу чуть иначе: в файлах 9 произвольных символов в имени, три в расширении. Надо их переместить в папки с именами, совпадающими с тремя (4+5+6) символами в имени файла. Решение двумя способами я привожу (один способ отличается от другого только организацией цикла по именам файлов). Ничего нового по сравнению с предыдущим ответом тут нет, но, однако, при этом я в очередной раз наткнулся на не совсем предсказуемую работу команд. У меня был набор следующих файлов в первой директории:
aaa abcd001ef.ext abcd001ef1.ext abcd001eg.ext abcd002ef.ext abcd002ef2.ext abcd002eg.ext bbb dddd В обоих кодах я оставил для отладки строку Echo %1 которую в рабочем режиме можно удалить. Я предполагал, что маска ?????????.??? гарантирует мне выборку файлов с именами в 9 символов. Увы, в обоих способах команда Echo %1 отображает все файлы из приведенного мной списка, хотя там в именах файлов встречается и 10 символов, и три, и четыре. Echo Off
Set Folder1=D:\Delete\Folder1
Set Folder2=D:\Delete\Folder2
FOR %%f IN ("%Folder1%\?????????.???") DO Call :MoveXXX "%%f"
GoTo :Eof
:MoveXXX
Echo %1
Set DirName=%~n1
Set DDD=%DirName%x
If Not %DDD:~0,9%==%DirName% GoTo :Eof
Set DirName=%DirName:~4,3%
If Not Exist "%Folder1%\????%DirName%??.???" GoTo :Eof
If Not Exist "%Folder2%\%DirName%" Md "%Folder2%\%DirName%"
Move /Y "%Folder1%\????%DirName%??.???" "%Folder2%\%DirName%\" >NUL
Строки кода Set DDD=%DirName%x If Not %DDD:~0,9%==%DirName% GoTo :Eof позволяют проконтролировать длину имени и добиться от батника ожидаемого результата. |
|
------- Последний раз редактировалось megaloman, 19-09-2011 в 17:04. Отправлено: 15:57, 19-09-2011 | #3 |
|
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать |
|
Отправлено: 17:49, 19-09-2011 | #4 |
|
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
![]() |
||
|
Отправлено: 04:20, 20-09-2011 | #5 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| CMD/BAT - [решено] Добавление к имени файла имя папки | Arsenik77 | Скриптовые языки администрирования Windows | 12 | 13-08-2011 20:28 | |
| VBS/WSH/JS - Перемещение файлов и папок в разные папки... | WalkManX | Скриптовые языки администрирования Windows | 0 | 07-08-2011 22:37 | |
| CMD/BAT - [решено] Копирование имени папки/файла в буфер обмена | cpp.svet | Скриптовые языки администрирования Windows | 3 | 06-07-2011 19:16 | |
| CMD/BAT - [решено] Перемещение устаревших файлов из папки в резервную папку | zavoruev | Скриптовые языки администрирования Windows | 22 | 28-05-2010 14:04 | |
| Ошибка - Каракули в реестре "Синтаксическая ошибка в имени файла,имени папки или метке тома" | permas | Microsoft Windows 2000/XP | 2 | 20-02-2010 19:30 | |
|