PDA

Показать полную графическую версию : [решено] Автозамена при перемещении


Страниц : 1 2 3 4 [5]

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

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

Tosyk
13-02-2011, 08:45
Ну что ж, скрипт работу завершил, вот последние строки:

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

?

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

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

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

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

Tosyk
13-02-2011, 09:01
не советую поддаваться соблазну запускать сразу на рабочих данных »
на самом деле у меня несколько копий всегда одного и того же перепакованных в разные места

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

amel27
13-02-2011, 09:56
отличаются именем и содержанием »Тогда возникает логичный вопрос: зачем что-то вообще удалять, если можно просто добавить к имени файла имя папки и проблема с дублями будет решена?.. а если удалять, то какую папку из множества дублей добавлять к имени?... это я к тому, что даже небольшое изменение в условии может в корне изменить всю постановку задачи... ;)
это будет сложнее чем просто добавить имя в уже готовом скрипте »еще не знаю, пока важней понять что нужно

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

amel27
14-02-2011, 11:37
пришлось внести изменения в каждый шаг:
@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

Tosyk
14-02-2011, 16:25
всё прошло успешно, скажите, а по какому шаблону она переименовывает копии?

...
Перемещено файлов: 1.
Перемещено файлов: 1.
OK
Deleting source folder...OK

Processed files all: 75748, including:

moved : 12518
renamed : 5812
copies deleted: 57418

Script works complited!

amel27
14-02-2011, 16:42
а по какому шаблону она переименовывает копии? »не совсем понял, как заказано в посте #82 - для копий добавляется имя каталога

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

Tosyk
14-02-2011, 16:58
MOVE не выдаёт сообщения о копировании »
о перемещении т.е., сделаю!

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

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

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

amel27
14-02-2011, 17:25
всё отлично сработало »ссылка в подписи
только в среде программирования, но какой? возможно вы знаете и подскажете? »ИМХО проще начать с AutoIT (http://forum.oszone.net/forum-103.html)

P.S. многовато отличий, если не секрет - какая ОС и локализация?
хотел бы вернуться к разговору об определении типа файла и его модификации »это другая тема

Tosyk
14-02-2011, 17:33
ссылка в подписи »
всё таки хотелось бы оттестить ещё на нескольких массивах файлов, хотя пожалуй можно же отменить решение

ИМХО проще начать с AutoIT »
я его конечно чейчас посмотри, но то ли это другой вопрос

многовато отличий, если не секрет - какая ОС и локализация? »
не совсем понял вопрос о локализации, вот так называется файл который взял у друга:
Delphi7_Lite_Full_Setup_v7.3.3.3v3(Build_2010-02-02).exe
но он у меня не устанавливается, система у меня не x86, а если вопрос про ось. то у меня 7 ultimate - x64 rus

add: даже нашёл первый урок схожей тематики (http://delphiexpert.ru/view_lesson.php?id=9)

amel27
15-02-2011, 01:15
у меня 7 ultimate - x64 rus »
это и хотел узнать, спасибо

P.S. AutoIT - скриптовый язык, для продвинутого кодинга есть бесплатный Microsoft Visial Studio Express (http://www.microsoft.com/express/)

Tosyk
15-02-2011, 05:09
P.S. AutoIT - скриптовый язык »
с его помощью возможно реализовать мои задумки:не нравится чёрное возникающее окно при исполнении скрипта, хочется чего то более "native to user" и очень хочу прогресс-бару»?

и если да, то могу я опубликовать ваш скрипт (тут #87) в ветке с Autoit?

amel27
15-02-2011, 05:24
с его помощью возможно реализовать мои задумки »AFAIK возможно
могу я опубликовать ваш скрипт (тут #87) в ветке с Autoit? »нет смысла, от CMD скорее всего придется отказаться, это уже будет "другая песня",
для экономии времени на обсуждение задачи можно дать линк на этот топик

Tosyk
15-02-2011, 05:29
для экономии времени на обсуждение задачи можно дать линк на этот топик »
но тут 100 сообщений, не проще ли объяснить суть задачи, дать скрипт и описать его работу?

amel27
15-02-2011, 05:49
Tosyk, "объяснить суть задачи" и "описать его работу" - обязательное требование к оформлению любого топика, сам батник тут лишний - тот, кто пишет на AutoIT не обязан знать CMD, но линк дать можно...

Tosyk
15-02-2011, 05:56
"объяснить суть задачи" и "описать его работу" »
тогда так (http://forum.oszone.net/showthread.php?p=1613181#post1613181) получается, спасибо :)

Tosyk
04-06-2012, 09:16
amel27, приветствую, после сотен применений вашего скрипта появилась проблема: не создаётся ФАЙЛ.$~3.
Соответственно скрипт об это уведомляет и ничего переносить не хочет.
скрипт использован из поста #87 (http://forum.oszone.net/post-1612506-87.html)

ошибка такая:
Scanning and preparing folders...OK
Scanning files for moving...OK
Sorting file list...'sort' is not recognized as an internal or external command,
operable program or batch file.
OK
Processing file list...The system cannot find the file C:\Users\1\Downloads\g\_converting_work\TESTFOLDER\unpacker.$~3.
OK
Deleting source folder...OK

Processed files all: 0, including:

moved : 0
renamed : 0
copies deleted: 0

Script works complited!


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

p.s.: прошу прощения за поднятие старой темы, но информация обновилась

Tosyk
07-06-2012, 12:25
проверил наличие файла C:\WINDOWS\SYSTEM32\sort.exe, он на месте.

проблема решена

в PATH переменных сред не было пути к C:\Windows\System32

после добавления его всё заработало, тема закрыта




© OSzone.net 2001-2012