|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Автозамена при перемещении |
|
CMD/BAT - [решено] Автозамена при перемещении
|
Старожил Сообщения: 166 |
Профиль | Отправить PM | Цитировать У меня есть много одинаковых (по имени - Material3) папок в различных под папках, очень много, в эти папках находятся *.mat файлы, среди *.mat файлов попадаются одинаковые
скриптом: перемещаю все эти папки в одно место, т.о. все папки должны слиться в одну, а все файлы *.mat переместиться в эту папку с заменой соответсвенно, но несмотря на использование ключа /y (пробовал и /Y) скрипт постоянно спрашивает о замене, как сделать автозамену в скрипте? |
|
Отправлено: 09:16, 15-01-2011 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать - ключ /Y работает только для файлов, а не для папок;
- в каталоге батника не должно быть папки "Material3", иначе DIR просто выдаст её содержимое; вариант через XCOPY и RD: |
Отправлено: 13:08, 15-01-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 166
|
Профиль | Отправить PM | Цитировать дело в том, что общий объём файлов может составлять до 50 гб, поэтому и хотел использовать именно move, так как нет возможности копировать такое количество мегабайт
add: ваш вариант работает add2: а как работает скрипт? так? либо находит папку -> копирует в нужное место -> находит папку -> копирует в нужное место -> ...находит и копирует все папки... -> удаляет оригиналы если первый вариант, то это вполне нормально (на диске единовременно не будет очень много скопированной информации) |
Последний раз редактировалось Tosyk, 15-01-2011 в 13:36. Отправлено: 13:13, 15-01-2011 | #3 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата Tosyk:
Цитата Tosyk:
@echo off SETLOCAL EnableDelayedExpansion for /f "delims=" %%d in ('dir /b/s/ad "Material3.*"') do if "%%~xd"=="" ( for /f "delims=" %%f in ('dir /b/s/a-d "%%d"') do ( set "$d=%%~dpf"& set "$d=!$d:%%~dpd=%%~dpd..\..\!" if not exist "!$d!" md "!$d!" if exist "!$d!" move "%%f" "!$d!" )) - операция одноразовая, скрипт поднимает на два уровня каждую папку Material3, 2-й запуск поднимет также и целевую папку, т.к. у них одинаковые имена |
||
Отправлено: 19:53, 15-01-2011 | #4 |
Старожил Сообщения: 166
|
Профиль | Отправить PM | Цитировать Большое спасибо, всё работает!
|
|
Отправлено: 19:55, 15-01-2011 | #5 |
Старожил Сообщения: 166
|
Профиль | Отправить PM | Цитировать появилась проблема, иногда файлы в папках Material3 имеют одинаковое имя, но разный размер (т.е по сути это другие файлы), как сделать так чтобы перед заменой файлов проводилась проверка размера, и если файл *.mat в папке имеет то же имя, но другой размер то к имени нового файла добалялось бы "01,02,03...и.т.д"
|
Отправлено: 14:08, 16-01-2011 | #6 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Tosyk, как-то так:
@echo off SETLOCAL EnableDelayedExpansion for /f "delims=" %%d in ('dir/b/s/ad "Material3.*"') do if "%%~xd"=="" ( for /f "delims=" %%f in ('dir/b/s/a-d "%%d"') do ( set "$d=%%~dpf"& set "$d=!$d:%%~dpd=%%~dpd..\..\!" call:MoveRen "%%f" "!$d!" )) :MoveRen %source_file% %destin_folder% ::------------------------------------- set "$s="& set "$n="& if "%~1"=="" GoTo:EOF if not exist "%~2" md "%~2"||exit/b 1 :MoveRen_Loop if not exist "%~2%~n1%$s%%~x1" move "%~1" "%~2%~n1%$s%%~x1"& GoTo:EOF fc/b "%~1" "%~2%~n1%$s%%~x1">nul&&(del/f/q "%~1"& GoTo:EOF) set/a "$n+=1"& set "$s=0!$n!"& set "$s=_!$s:~-2!" GoTo:MoveRen_Loop |
Отправлено: 11:55, 17-01-2011 | #7 |
Старожил Сообщения: 166
|
Профиль | Отправить PM | Цитировать проверил, работает, проверяет, изменяет имя, по крайней мере первого уровня (_01.mat)
а как добавить ещё одну (или несколько) папку в обработку помимо Material3, пытаюсь сделать: @echo off SETLOCAL EnableDelayedExpansion for /f "delims=" %%d in ('dir/b/s/ad "Material3.*"') do if "%%~xd"=="" ( for /f "delims=" %%f in ('dir/b/s/a-d "%%d"') do ( set "$d=%%~dpf"& set "$d=!$d:%%~dpd=%%~dpd..\..\!" call:MoveRen "%%f" "!$d!" )) :MoveRen %source_file% %destin_folder% ::------------------------------------- set "$s="& set "$n="& if "%~1"=="" GoTo:EOF if not exist "%~2" md "%~2"||exit/b 1 :MoveRen_Loop if not exist "%~2%~n1%$s%%~x1" move "%~1" "%~2%~n1%$s%%~x1"& GoTo:EOF fc/b "%~1" "%~2%~n1%$s%%~x1">nul&&(del/f/q "%~1"& GoTo:EOF) set/a "$n+=1"& set "$s=0!$n!"& set "$s=_!$s:~-2!" GoTo:MoveRen_Loop for /f "delims=" %%d in ('dir/b/s/ad "MaterialConst.*"') do if "%%~xd"=="" ( for /f "delims=" %%f in ('dir/b/s/a-d "%%d"') do ( set "$d=%%~dpf"& set "$d=!$d:%%~dpd=%%~dpd..\..\!" call:MoveRen "%%f" "!$d!" )) :MoveRen %source_file% %destin_folder% ::------------------------------------- set "$s="& set "$n="& if "%~1"=="" GoTo:EOF if not exist "%~2" md "%~2"||exit/b 1 :MoveRen_Loop if not exist "%~2%~n1%$s%%~x1" move "%~1" "%~2%~n1%$s%%~x1"& GoTo:EOF fc/b "%~1" "%~2%~n1%$s%%~x1">nul&&(del/f/q "%~1"& GoTo:EOF) set/a "$n+=1"& set "$s=0!$n!"& set "$s=_!$s:~-2!" GoTo:MoveRen_Loop |
Отправлено: 16:12, 17-01-2011 | #8 |
Новый участник Сообщения: 48
|
Профиль | Отправить PM | Цитировать попробуйте программу robocopy . это типа xcopy и просто copy , так же она от Microsoft и имеет КУЧУ пользных и гибких ключей , для копирование и т.п.
|
Отправлено: 16:15, 17-01-2011 | #9 |
Старожил Сообщения: 166
|
Профиль | Отправить PM | Цитировать Цитата forsem:
|
|
Отправлено: 16:22, 17-01-2011 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Проблема с переносом разрешений при перемещении данных | alnimo | Microsoft Windows NT/2000/2003 | 5 | 21-12-2010 12:22 | |
2003/XP/2000 - Изменение даты письма при перемещении между папками | faktroot | Microsoft Office (Word, Excel, Outlook и т.д.) | 0 | 26-02-2010 17:58 | |
Треск звука при перемещении мыши | Dr. MefistO | Непонятные проблемы с Железом | 9 | 07-12-2008 14:26 | |
Интерфейс - Неправильное отображение иконки файла при перемещении | kopylovsergey | Microsoft Windows 2000/XP | 3 | 19-08-2008 11:24 | |
[решено] Странная загрузка процессора при перемещении мыши | DMGaster | Microsoft Windows 2000/XP | 12 | 13-09-2006 18:17 |
|