Показать полную графическую версию : [решено] Автозамена при перемещении
Tosyk, ничего особенного - из лога видно, что процесс был прерван вручную комбинацией Ctrl+C, попробуйте сначала прогнать скрипт без лога, либо уменьшите количество папок - с логом скрипт работает в десятки раз медленней
Запустил опять остановился, странно опять остановился на том же самом каталоге на котором останавливался и самый первый скрипт из темы, имя каталога "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)
в котором как раз находится первый *.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 и еще раз прогнать
запустил скрипт (script_only_structer_4_eng.bat), появилось чёрное окно cmd, во время выполнения появился и рос файл script_only_structer_4_eng.$~1, в нём список папок из _export_
скрипт почему-то проигнорировал 2 последние папки:
Zephi_Yupa2_SS_0038
Zephi_Yupa2_SS_0243
в нём список папок из _export_ »А вот и неправильно! В нём список подпапок папок из _export_, т.е. если папка ".\_export_\Zephi_Yupa2_SS_0038" не содержит подпапок, то в список и включать нечего... Кстати, как там начет XCOPY?.. Например, команда для "wp_Zephi_st2_3_Rose\Material3" должна получиться такой:
xcopy /t ".\_export_\wp_Zephi_st2_3_Rose\Material3\*" ".\Material3\"
В нём список подпапок папок из _export_ »
да-да, верно, я это и имел ввиду
т.е. если папка ".\_export_\Zephi_Yupa2_SS_0038" не содержит подпапок, то в список и включать нечего... »
как раз папка содержит всё тоже самое, что и остальные
Кстати, как там начет XCOPY? »
т.е. нужно заменить строку из #63
REM xcopy /t "%%~c\*" ".\%%~nc\"на
xcopy /t ".\_export_\wp_Zephi_st2_3_Rose\Material3\*" ".\Material3\" »
?
как раз папка содержит всё тоже самое, что и остальные »тогда только вывести структуру в файл (dir.txt) и выложить этот файл на обменник:
dir /b/s/ad .\_export_\* >dir.txt
т.е. нужно заменить строку из #63 »как уже сказал - "раскомментировать", т.е. убрать REM
xcopy /t ".\_export_\wp_Zephi_st2_3_Rose\Material3\*" ".\Material3\"эту команду можно проверить и без батника
тогда только вывести структуру в файл (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\"
эту команду можно проверить и без батника »
по окнчании процесса сделаю!
скрипт почему-то проигнорировал 2 последние папки »да нет, у меня вывел все папки до одной
скрипт меня спросил о замене файла M01.mat в корне\Material3, если я нажму да/всё, он просто всё заменит? »батник в посте #63 (http://forum.oszone.net/post-1598403-63.html) ничего не должен заменять/спрашивать (даже с XCOPY), т.к. он ничего не копирует - только создаёт структуру пустых каталогов
как уже сказал - "раскомментировать", т.е. убрать 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Запустил его, по окончании я отпишу результат
всё это работает если в корне нет Material3 с файлами! »само собой, до запуска скрипта этих папок там не должно быть, этот вариант батника не предусматривает многократный запуск
я уже начинаю запутываться в вариантах »дык и не постите код без нужды, вариант-то всего один в посте #43... но если есть проблемы, нужно отлаживать по частям, в посте #63 первая часть баника с формированием 1-го временного файла
скрипт завершил работу: создал все папки (пустые) и 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 - пустой
что теперь делать?
что теперь делать? »
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
Не понимаю, а разве скрипт из #70 (http://forum.oszone.net/post-1599939-70.html) не должен был ничего переносить? В нём ведь написано moved и.т.д
Tosyk, если файл .$~2 пустой, значит спискок файлов для перемещения не сформирован - либо в подкаталогах из .$~1 скрипт не нашел файлов, либо какая-то другая ошибка - вот это и надо теперь выяснить...
P.S. все эти движения называются отладкой (частей) кода скрипта на реальных данных
http://dl.dropbox.com/u/9919707/script_working/_only_mover_3_eng.log
вот лог
_only_mover_3_eng.$~2 пустой
вот лог »
странно, но я не смог воспроизвести эту ошибку у себя на 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 - добавил кавычки, не знаю поможет или нет... попробуйте проделать описанную процедуру на другом компьютере без копирования всей папки, может в настройках дело, или код как-то странно копипастится с форума...
попробовал с изменённым скриптом из поста #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_/". Может быть теперь попробуем какую-то полную версию скрипта?
amel27, возможно ли продолжить наше обсуждение? вроде как в нужном направлении идём, хотелось бы закончить
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.