Войти

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


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

amel27
27-01-2011, 10:55
Tosyk, ничего особенного - из лога видно, что процесс был прерван вручную комбинацией Ctrl+C, попробуйте сначала прогнать скрипт без лога, либо уменьшите количество папок - с логом скрипт работает в десятки раз медленней

Tosyk
27-01-2011, 11:43
Запустил опять остановился, странно опять остановился на том же самом каталоге на котором останавливался и самый первый скрипт из темы, имя каталога "wp_Zephi_st2_3_Rose". это первый каталог в котором в Material3 присутствует уже упомянутый M01.mat. Сподкнулся он именно на этом файле, т.к в script_only_mover_2.$~1 существует последовательность:


...
..\_export_\wp_Zephi_st2_1_Sakura\Texture2D
..\_export_\wp_Zephi_st2_1_Sakura\SkeletalMesh
..\_export_\wp_Zephi_st2_1_Sakura\Material3
..\_export_\wp_Zephi_st2_1_Sakura\StaticMesh
..\_export_\wp_Zephi_st2_2_Narcissus\Texture2D
..\_export_\wp_Zephi_st2_2_Narcissus\SkeletalMesh
..\_export_\wp_Zephi_st2_2_Narcissus\Material3
..\_export_\wp_Zephi_st2_2_Narcissus\StaticMesh
..\_export_\wp_Zephi_st2_3_Rose\Texture2D
..\_export_\wp_Zephi_st2_3_Rose\SkeletalMesh

дальше должен быть каталог
..\_export_\wp_Zephi_st2_3_Rose\Material3

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

amel27
27-01-2011, 14:31
в котором как раз находится первый *.mat - M01.mat! »
Первый блок кода (тот что формирует файл .$~1) вообще игнорирует файлы - он только перечисляет имена подкаталогов 2-го уровня + "вытаскивает" их структуру без файлов (строка с XCOPY)... Вот этот кусок с закомментированной командой XCOPY:
@echo off
set root=.\_export_
if not exist "%root%" echo Не найден корневой каталог!& pause>nul& exit

SETLOCAL EnableDelayedExpansion
for %%a in ("%root%") do set "rpth=%%~fa"

type nul >"%~dpn0.$~1"
(for /d %%a in ("%rpth%") do for /d %%b in ("%%~a\*") do for /d %%c in ("%%~b\*") do (
REM xcopy /t "%%~c\*" ".\%%~nc\"
>>"%~dpn0.$~1" echo %%~c
))

проверь такой вариант, если пройдёт и файл-список сформируется, попробуй раскомментировать XCOPY и еще раз прогнать

Tosyk
27-01-2011, 15:05
запустил скрипт (script_only_structer_4_eng.bat), появилось чёрное окно cmd, во время выполнения появился и рос файл script_only_structer_4_eng.$~1, в нём список папок из _export_

скрипт почему-то проигнорировал 2 последние папки:

Zephi_Yupa2_SS_0038
Zephi_Yupa2_SS_0243

amel27
27-01-2011, 16:38
в нём список папок из _export_ »А вот и неправильно! В нём список подпапок папок из _export_, т.е. если папка ".\_export_\Zephi_Yupa2_SS_0038" не содержит подпапок, то в список и включать нечего... Кстати, как там начет XCOPY?.. Например, команда для "wp_Zephi_st2_3_Rose\Material3" должна получиться такой:
xcopy /t ".\_export_\wp_Zephi_st2_3_Rose\Material3\*" ".\Material3\"

Tosyk
27-01-2011, 17:17
В нём список подпапок папок из _export_ »
да-да, верно, я это и имел ввиду

т.е. если папка ".\_export_\Zephi_Yupa2_SS_0038" не содержит подпапок, то в список и включать нечего... »
как раз папка содержит всё тоже самое, что и остальные

Кстати, как там начет XCOPY? »

т.е. нужно заменить строку из #63
REM xcopy /t "%%~c\*" ".\%%~nc\"на
xcopy /t ".\_export_\wp_Zephi_st2_3_Rose\Material3\*" ".\Material3\" »
?

amel27
27-01-2011, 18:27
как раз папка содержит всё тоже самое, что и остальные »тогда только вывести структуру в файл (dir.txt) и выложить этот файл на обменник:
dir /b/s/ad .\_export_\* >dir.txt

т.е. нужно заменить строку из #63 »как уже сказал - "раскомментировать", т.е. убрать REM

xcopy /t ".\_export_\wp_Zephi_st2_3_Rose\Material3\*" ".\Material3\"эту команду можно проверить и без батника

Tosyk
29-01-2011, 11:44
тогда только вывести структуру в файл (dir.txt) и выложить этот файл на обменник »
http://dl.dropbox.com/u/9919707/script_working/dir.txt - вот
как уже сказал - "раскомментировать", т.е. убрать REM »
процесс идёт!

ДОБАВКА: скрипт меня спросил о замене файла M01.mat в корне\Material3, если я нажму да/всё, он просто всё заменит?

xcopy /t ".\_export_\wp_Zephi_st2_3_Rose\Material3\*" ".\Material3\"
эту команду можно проверить и без батника »
по окнчании процесса сделаю!

amel27
29-01-2011, 17:20
скрипт почему-то проигнорировал 2 последние папки »да нет, у меня вывел все папки до одной

скрипт меня спросил о замене файла M01.mat в корне\Material3, если я нажму да/всё, он просто всё заменит? »батник в посте #63 (http://forum.oszone.net/post-1598403-63.html) ничего не должен заменять/спрашивать (даже с XCOPY), т.к. он ничего не копирует - только создаёт структуру пустых каталогов

Tosyk
29-01-2011, 18:02
как уже сказал - "раскомментировать", т.е. убрать REM »
xcopy /t ".\_export_\wp_Zephi_st2_3_Rose\Material3\*" ".\Material3\" »
всё это работает если в корне нет Material3 с файлами!

извените за ре-пост скрипта, но я уже начинаю запутываться в вариантах, поэтому буду отталкиваться от этого:
@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 $="Scaning and preparing folders..."
type nul >"%~dpn0.$~1"
(for /d %%a in ("%rpth%") do for /d %%b in ("%%~a\*") do for /d %%c in ("%%~b\*") do (
xcopy /q/t "%%~c\*" ".\%%~nc\">nul
>>"%~dpn0.$~1" echo %%~c
))
echo OK& <nul set/p $="Scaning files for moving..."
type nul >"%~dpn0.$~2"
(for /f "usebackq delims=" %%a in ("%~dpn0.$~1") do (
for /f "delims=" %%b in ('dir/b/s/a-d "%%a\*"') do (set "$b=%%b"
>>"%~dpn0.$~2" echo !$b:%%a=%~dp0%%~na!?%%~zb?!$b!
)))
echo OK& <nul set/p $="Sorting file list..."
sort /l "C" "%~dpn0.$~2" /o "%~dpn0.$~3"
echo OK& <nul set/p $="Working with file list..."
set "$a="& set "$b="& set/a "$n1=0,$n2=0,$n3=0"
for /f "usebackq tokens=1-3 delims=?" %%a in ("%~dpn0.$~3") do (
if not "!$a!"=="%%a" (
move "%%c" "%%a"
set "$a=%%a"& set "$b=%%b"& set/a "$k=0,$n1+=1"
) else if not "!$b!"=="%%b" (
set/a "$k+=1,$n2+=1"& set "$k=000!$k!"& set "$b=%%b"
move "%%c" "%%~dpna_!$k:~-4!%%~xa"
) else set/a $n3+=1
)
echo OK& <nul set/p $="Deleting source folder..."
set/a "$n0=$n1+$n2+$n3"& rd /s/q "%rpth%"
echo OK& echo.& echo.Processed files all: !$n0!, из них:& echo.
echo.moved : %$n1%
echo.renamed : %$n2%
echo.copies deleted: %$n3%
ENDLOCAL
echo.& echo Script works complited!
pause>nulЗапустил его, по окончании я отпишу результат

amel27
29-01-2011, 18:31
всё это работает если в корне нет Material3 с файлами! »само собой, до запуска скрипта этих папок там не должно быть, этот вариант батника не предусматривает многократный запуск

я уже начинаю запутываться в вариантах »дык и не постите код без нужды, вариант-то всего один в посте #43... но если есть проблемы, нужно отлаживать по частям, в посте #63 первая часть баника с формированием 1-го временного файла

Tosyk
29-01-2011, 18:44
скрипт завершил работу: создал все папки (пустые) и 2 файла:

_only_mover_3_eng.$~1 (http://dl.dropbox.com/u/9919707/script_working/_only_mover_3_eng.%24%7E1)
_only_mover_3_eng.$~2 - пустой

что теперь делать?

amel27
30-01-2011, 12:24
что теперь делать? »
1-й временный файл сформирован, значит 1-я часть батника отработала без ошибок... 2-я часть батника на базе $~1-файла строит список файлов для каждого подкаталога и записывает в файл $~2, вот её код:
@echo on
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"

type nul >"%~dpn0.$~2"
(for /f "usebackq delims=" %%a in ("%~dpn0.$~1") do (
for /f "delims=" %%b in ('dir/b/s/a-d "%%~a\*"2^>nul') do (set "$b=%%b"
>>"%~dpn0.$~2" echo "!$b:%%a=%~dp0%%~na!"?"%%~zb"?"!$b!"
)))
имя скрипта и $~1-файла должны совпадать, например:
_only_mover_test.$~1
_only_mover_test.bat
запуск с выводом в лог:
_only_mover_test.bat >_only_mover_test.log 2>&1

Tosyk
30-01-2011, 13:59
Не понимаю, а разве скрипт из #70 (http://forum.oszone.net/post-1599939-70.html) не должен был ничего переносить? В нём ведь написано moved и.т.д

amel27
30-01-2011, 14:36
Tosyk, если файл .$~2 пустой, значит спискок файлов для перемещения не сформирован - либо в подкаталогах из .$~1 скрипт не нашел файлов, либо какая-то другая ошибка - вот это и надо теперь выяснить...

P.S. все эти движения называются отладкой (частей) кода скрипта на реальных данных

Tosyk
30-01-2011, 15:24
http://dl.dropbox.com/u/9919707/script_working/_only_mover_3_eng.log

вот лог

_only_mover_3_eng.$~2 пустой

amel27
31-01-2011, 12:49
вот лог »
странно, но я не смог воспроизвести эту ошибку у себя на XP/2003, ведь если тупо:

- копируем в любой каталог два файла:
_only_mover_test.$~1 - результат работы 1-й части скрипта (пост #63)
_only_mover_test.bat - скрипт из поста #73- создаём в этом же каталоге папку "_export_" (пустую);
- запускаем скрипт:
_only_mover_test.bat >_only_mover_test.log 2>&1

в результате должен создаться пустой _only_mover_test.$~2 (файлов нет), но БЕЗ ОШИБОК

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

Tosyk
09-02-2011, 05:30
попробовал с изменённым скриптом из поста #73, всё сработало, по крайней мере _only_mover_3_eng.$~2 теперь не пустой, приложил к посту файлы:

_only_mover_3_eng.$~1 -- 320 kb
_only_mover_3_eng.$~2 -- 19000 kb
_only_mover_3_eng.log -- 8500 kb

http://dl.dropbox.com/u/9919707/script_working/script_working.7z

add:
распаковал снова всё в папку "./_export_/". Может быть теперь попробуем какую-то полную версию скрипта?

Tosyk
10-02-2011, 07:45
amel27, возможно ли продолжить наше обсуждение? вроде как в нужном направлении идём, хотелось бы закончить

amel27
11-02-2011, 12:21
Tosyk, за неделю уже забыл о чем речь....

3-й этап (требуется наличие файла .$~2):@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 $="Sorting file list..."
sort /l "C" "%~dpn0.$~2" /o "%~dpn0.$~3"

echo OK

4-й этап (требуется наличие файла .$~3):@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 $="Processing file list..."
set "$a="& set "$b="& set/a "$n1=0,$n2=0,$n3=0"
for /f "usebackq tokens=1-3 delims=?" %%a in ("%~dpn0.$~3") do (
if not "!$a!"=="%%~a" (
move "%%~c" "%%~a"
set "$a=%%~a"& set "$b=%%~b"& set/a "$k=0,$n1+=1"
) else if not "!$b!"=="%%~b" (
set/a "$k+=1,$n2+=1"& set "$k=000!$k!"& set "$b=%%~b"
move "%%~c" "%%~dpna_!$k:~-4!%%~xa"
) else set/a $n3+=1
)

echo OK& echo(& echo Processed files all: !$n0!, including:& echo(
echo moved : %$n1%
echo renamed : %$n2%
echo copies detected: %$n3%

P.S. все изменения отразил в посте #43




© OSzone.net 2001-2012