Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Автозамена при перемещении

Ответить
Настройки темы
CMD/BAT - [решено] Автозамена при перемещении

Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


У меня есть много одинаковых (по имени - Material3) папок в различных под папках, очень много, в эти папках находятся *.mat файлы, среди *.mat файлов попадаются одинаковые

скриптом:

Код: Выделить весь код
for /f "tokens=*" %%b in ('dir /b /s Material3') do move /y "%%b" "%%~dpb../.."
перемещаю все эти папки в одно место, т.о. все папки должны слиться в одну, а все файлы *.mat переместиться в эту папку с заменой соответсвенно, но несмотря на использование ключа /y (пробовал и /Y) скрипт постоянно спрашивает о замене, как сделать автозамену в скрипте?

Отправлено: 09:16, 15-01-2011

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Tosyk:
а как добавить ещё одну (или несколько) папку в обработку »
оформить как процедуру:
Код: Выделить весь код
@echo off
SETLOCAL EnableDelayedExpansion

Call :MainExe Material3
Call :MainExe MaterialConst

EXIT

:MainExe  %folder_name%
::---------------------
 set "set $d="& if "%~1"=="" GoTo:EOF
 for /f "delims=" %%d in ('dir/b/s/ad "%~1.*"') 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!"
))
GoTo:EOF

: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
P.S. имя папки должно быть без расширения (особенность алгоритма)

Отправлено: 16:48, 17-01-2011 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


amel27, не понимаю зависимости, как добавить ещё несколько папок, не разберу из последнего скрипта.

нужно просто добавлять к

Код: Выделить весь код
Call :MainExe Material3
Call :MainExe MaterialConst
новые папки
Код: Выделить весь код
Call :MainExe Folder01
Call :MainExe Folder02
так ли это?

Отправлено: 16:58, 17-01-2011 | #12


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Tosyk, да

кстати, зря проигнорировали предложение forsem,
в отличие от XCOPY, у ROBOCOPY есть ключ по перемещению папок

Отправлено: 17:13, 17-01-2011 | #13


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


Работает чётко! Спасибо

а как сделать чтобы после перемещения удалялась исходная папка?

Допустим такая структура:

Код: Выделить весь код
_export_
               fold01
                         Material3
                         MaterialConst
                         MatsFull
               fold02
                         Material3
                         MaterialConst
                         MatsFull
получается в папке _export_ после завершения операции 0 байт, я пробую удалить её командой

Код: Выделить весь код
RD /S/Q _export_
написав её в конце скрипта, но скрипт просто игнорирует её.

p.s.: я не проигнорировал упоминание ROBOCOPY, просто во-первых я "тупо не шарю", извените за сленг, а во-вторых я считаю, что если взялся за что-то одно, его нужно завершить.

Отправлено: 17:43, 17-01-2011 | #14


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


такая непонятность:

скрипт завис (не крашился а завис) на 814 файле и не идёт дальше.

касперский негодует

в диспетчере задач постоянно выскакивает и пропадает процесс fc.exe

папки с файлами Material3 ещё есть

Отправлено: 06:12, 18-01-2011 | #15


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Tosyk:
как сделать чтобы после перемещения удалялась исходная папка? »
вариант с удалением успешно перемещенных папок:
Код: Выделить весь код
@echo off
SETLOCAL EnableDelayedExpansion

Call :MainExe Material3
Call :MainExe MaterialConst

EXIT

:MainExe  %folder_name%
::---------------------
 set "set $d="& if "%~1"=="" GoTo:EOF
 for /f "delims=" %%d in ('dir/b/s/ad "%~1.*"') do if "%%~xd"=="" (
   set "$e=0"& for /f "delims=" %%f in ('dir/b/s/a-d "%%d"') do (
     set "$d=%%~dpf"& set "$d=!$d:%%~dpd=%%~dpd..\..\!"
     call:MoveRen "%%f" "!$d!"||set/a $e+=1 )
   if !$e!==0 rd /s/q "%%d" )
GoTo:EOF

: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||exit/b 2
 fc/b "%~1" "%~2%~n1%$s%%~x1">nul&& (del/f/q "%~1"&& GoTo:EOF||exit/b 3)
 set/a "$n+=1"& set "$s=0!$n!"& set "$s=_!$s:~-2!"
GoTo:MoveRen_Loop

Последний раз редактировалось amel27, 18-01-2011 в 12:47. Причина: посветка строки


Отправлено: 06:32, 18-01-2011 | #16


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо, а как быть с остановившимся процессом, касперский отключил, но ничего не изменилось?

p.s.: последний файл был M01_00.mat

Отправлено: 06:50, 18-01-2011 | #17


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Tosyk:
как быть с остановившимся процессом »
смотря что хотите, вообще анализ ошибок через запуск:
Код: Выделить весь код
script.bat >script.log 2>&1
...и смотрим лог "script.log", только в батнике предварительно поправить 1 строку: "@echo off" -> "@echo on"


P.S. антивирус может блокировать файлы и тем самым препятствовать их удалению/переименованию

Отправлено: 07:21, 18-01-2011 | #18


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


Отключил антивирус, запустил скрипт снова, перемещено 3 500 файлов (вкупе 4 папки), полёт нормальный, в первый раз ошибок не заметил, постоянно наблюдал, на экране написано 1 file(s) moved - много раз.

p.s.: осталась самая полновесная папка - 56 000 элементов.

Отправлено: 07:34, 18-01-2011 | #19


Аватара для Tosyk

Старожил


Сообщения: 166
Благодарности: 0

Профиль | Отправить PM | Цитировать


а с чем может быть связана невероятно низкая скорость работы скрипта? без касперского

примерно 2-3 файла в 5-9 минут

виндовс на компе несколько дней, никаких лишних программ не стоит даже офиса нет

Отправлено: 09:59, 18-01-2011 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Автозамена при перемещении

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Проблема с переносом разрешений при перемещении данных 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




 
Переход