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

Компьютерный форум 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

 

Аватара для Tosyk

Старожил


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

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


спасибо, сейчас хочу запустить этот глобальный скрипт из поста #43, как я понял он то и сделает всю работу, так вот возможно ли сделать вывод в лог с отображением процесса в окне cmd?

add: в принципе не принципиально, я понял, что там особой информации нет в процессе.

Последний раз редактировалось Tosyk, 13-02-2011 в 07:07.


Отправлено: 06:05, 13-02-2011 | #81



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

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


Аватара для Tosyk

Старожил


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

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


Ну что ж, скрипт работу завершил, вот последние строки:

Код: Выделить весь код
Deleting source folder...OK

Processed files all: 75748, including:

moved         : 12518
renamed       : 5812
copies deleted: 57418

Script works complited!
папка _export_ удалена, все нужные с проверенными\переименованными файлами папки создались. Скрипт отработал примерно 1:20 никаких зависаний работы либо системы не было.

не сочтите за наглость, в довершение вот, что хотелось бы:

для удобства распознования переименованных файлов, можно ли к их имени добавлять в конце имя папки в которой они распологаются? например:

уже есть первый файл:

F:\il tempo\SkeletalMesh\sm.bmp

второй файл распологается в:

F:\il tempo\_export_\01_SenLab_02bossarea\SkeletalMesh\sm.bmp"

он прошёл проверку на "разность" и копируется в папку с первым файлом с именем sm_0001.bmp, а можно ли к этому имени добавить папку его содержащую, чтобы было так:

F:\il tempo\SkeletalMesh\sm_0001_01_SenLab_02bossarea.bmp

?

Отправлено: 08:45, 13-02-2011 | #82


Googler


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

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


Цитата Tosyk:
сейчас хочу запустить этот глобальный скрипт из поста #43, как я понял он то и сделает всю работу »
на будущее - не советую поддаваться соблазну запускать сразу на рабочих данных, лучше сначала на каком-нибудь небольшом тестовом наборе, где между тем встречаются все случаи - с удалением, переименованием и без

Цитата Tosyk:
возможно ли сделать вывод в лог с отображением процесса в окне cmd? »
теоретически возможно, но овчинка выделки не стоит - это замедлит работу скрипта в разы, информация об этапах итак выводится, а временные файлы - по сути тот же лог

P.S. уж если и модернизировать скрипт, то в сторону применения DIFF вместо размера

Цитата Tosyk:
можно ли к этому имени добавить папку его содержащую »
можно, а зачем тогда цифры, по идее одноименные файлы только и отличаются, что папкой, или я не прав?

Отправлено: 08:49, 13-02-2011 | #83


Аватара для Tosyk

Старожил


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

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


Цитата amel27:
не советую поддаваться соблазну запускать сразу на рабочих данных »
на самом деле у меня несколько копий всегда одного и того же перепакованных в разные места

Цитата amel27:
можно, а зачем тогда цифры, по идее одноименные файлы только и отличаются, что папкой »
да верно, отличаются именем и содержанием, я просто подумал, что если подставлять к имени файла имя папки то это будет сложнее чем просто добавить имя в уже готовом скрипте, в любом случае если возник такой вопрос, то я не прав

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


Googler


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

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


Цитата Tosyk:
отличаются именем и содержанием »
Тогда возникает логичный вопрос: зачем что-то вообще удалять, если можно просто добавить к имени файла имя папки и проблема с дублями будет решена?.. а если удалять, то какую папку из множества дублей добавлять к имени?... это я к тому, что даже небольшое изменение в условии может в корне изменить всю постановку задачи...
Цитата Tosyk:
это будет сложнее чем просто добавить имя в уже готовом скрипте »
еще не знаю, пока важней понять что нужно

Отправлено: 09:56, 13-02-2011 | #85


Аватара для Tosyk

Старожил


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

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


Цитата amel27:
просто добавить к имени файла имя папки и проблема с дублями будет решена? »
дело в том, что не хотелось бы хранить эти копии на жёстком диске пускай они и имеют разные имена, наверное обратили внимание, что было удалено около 60 тысяч копий файлов, это мягко говоря не мало.
скрипт в том состоянии, что есть сейчас делает свою работу превосходно, и спасибо вам за это!, единственное что хотелось добавить это как раз добавление к скопированным и перемещённым "копиям" имя расположения для упрощения идентификации и дальнейшей работы с файлами, а вот оставлять 60000 копий файлов совсем не хотеловь бы

Отправлено: 10:25, 13-02-2011 | #86


Googler


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

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


пришлось внести изменения в каждый шаг:
Код: Выделить весь код
@echo off
set root=.\_export_
if not exist "%root%" echo Can't find root folder!& pause>nul& exit

SETLOCAL EnableDelayedExpansion
for %%a in ("%root%") do set "rpth=%%~fa"
<nul set/p $="Scanning and preparing folders..."
(for /d %%a in ("%rpth%\*") do for /d %%b in ("%%~a\*") do (
if not exist ".\%%~nb\" md ".\%%~nb\"
echo "%%~b"?"%%~na"
))>"%~dpn0.$~1"
echo OK& <nul set/p $="Scanning files for moving..."
(for /f "usebackq tokens=1,2 delims=?" %%A in ("%~dpn0.$~1") do (
 for %%b in ("%%~A\*") do (set "$b=%%b"
 echo "!$b:%%~A=%~dp0%%~nA!"?"%%~zb"?"!$b!"?%%~B
)))>"%~dpn0.$~2"
echo OK& <nul set/p $="Sorting file list..."
sort /l "C" "%~dpn0.$~2" /o "%~dpn0.$~3"
echo OK& <nul set/p $="Processing file list..."
set "$a="& set "$b="& set/a "$n1=0,$n2=0,$n3=0"
for /f "usebackq tokens=1-4 delims=?" %%a in ("%~dpn0.$~3") do (
 if not "!$a!"=="%%~a" (
   move "%%~c" "%%~a"
   set/a $n1+=1
 ) else if not "!$b!"=="%%~b" (
   move "%%~c" "%%~dpna_%%~d%%~xa"
   set/a $n2+=1
 ) else set/a $n3+=1
 set "$a=%%~a"& set "$b=%%~b"
)
echo OK& <nul set/p $="Deleting source folder..."
rd /s/q "%rpth%"
set/a "$n0=$n1+$n2+$n3"
echo OK& echo(& echo Processed files all: !$n0!, including:& echo(
echo moved         : %$n1%
echo renamed       : %$n2%
echo copies deleted: %$n3%

ENDLOCAL
echo(& echo Script works complited!
pause>nul

Отправлено: 11:37, 14-02-2011 | #87


Аватара для Tosyk

Старожил


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

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


всё прошло успешно, скажите, а по какому шаблону она переименовывает копии?

Код: Выделить весь код
...
Перемещено файлов:         1.
Перемещено файлов:         1.
OK
Deleting source folder...OK

Processed files all: 75748, including:

moved         : 12518
renamed       : 5812
copies deleted: 57418

Script works complited!

Последний раз редактировалось Tosyk, 14-02-2011 в 16:31.


Отправлено: 16:25, 14-02-2011 | #88


Googler


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

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


Цитата Tosyk:
а по какому шаблону она переименовывает копии? »
не совсем понял, как заказано в посте #82 - для копий добавляется имя каталога

кстати, у меня MOVE не выдаёт сообщения о копировании, чтобы их подавить нужно добавить ">NUL":
Код: Выделить весь код
move "%%~c" "%%~a">nul

Отправлено: 16:42, 14-02-2011 | #89


Аватара для Tosyk

Старожил


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

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


Цитата amel27:
MOVE не выдаёт сообщения о копировании »
о перемещении т.е., сделаю!

вообщем-то всё отлично сработало и достаточно быстро, около 40 минут. спасибо огромное, всё такие командный интерпритатор ещё способен на многое!

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

немного лирики: не нравится чёрное возникающее окно при исполнении скрипта, хочется чего то более "native to user" и очень хочу прогресс-бара. определённо добиться этого можно только в среде программирования, но какой? возможно вы знаете и подскажете? пока я остановился на delphi, взял у друга, delphi v7.3.3.3

Отправлено: 16:58, 14-02-2011 | #90



Компьютерный форум 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




 
Переход