PDA

Показать полную графическую версию : копирование файлов по hash-имени из HEX исходного файла


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

Tosyk
28-06-2018, 21:26
что-то не может найти ни одного файла.
все пути прописал правильно, проверил. все чанки у меня в одной папке, до которой я указываю путь. беру файл: D:\_r\fb\_ex_test\bundles\res\characters\heads\sp_brady\sp_brady_head_mesh 00160000000000003801000070009400.MeshSet и кидаю его на ps_chunks0_search.vbs. в итоге мигает чёрное окно с красным текстом. правильный чанк по пути имеется.

Iska
29-06-2018, 00:44
Tosyk, ну, если у меня работает, а у Вас нет, значит, явно что-то не так.

Покажите Ваш код PowerShell с исправленными путями. Покажите Ваш код ps_chunks0_search.vbs. Покажите содержимое каталога с «все чанки у меня в одной папке, до которой я указываю путь». Упакуйте в архив Ваш sp_brady_head_mesh 00160000000000003801000070009400.MeshSet и приложите к сообщению. Покажите скриншот с:
в итоге мигает чёрное окно с красным текстом. »

Tosyk
29-06-2018, 09:14
я бы сделал скриншот, но как? окно ведь мигает. можно как-то запаузить его?

Iska
29-06-2018, 10:57
Добавьте в самый конец Sample.ps1:
Read-Host | Out-Null

Tosyk
29-06-2018, 21:40
в окошке было написано, что у меня компьютере не разрешено выполнение таких скриптов. я дал разрешение и всё заработало.
несколько вопросов:

1. можно ли сделать поиск чанков рекурсивным? - если у меня в папке CHUNK будет структура сложнее одной папки
2. можно ли сделать чтобы скрипт не заменял скопированный чанк если он уже есть в папке а именовал его как-то с суфиксом?
3. можно ли добавить возможность копирования чанков с их оригиналными именами рядом с исходным файлом в папку CHUNKS?
4. можно ли как-то исбежать шаг разрешения выполнения подобных скриптов на компе?


вообще это очень крутая штука, работает как надо, спасибо вам огромное! много лет не решался написать по этому поводу сюда

p.s.: можно ли как-то транслитировать этот код в auto-it и зашить в exe?

Iska
29-06-2018, 23:51
1. можно ли сделать поиск чанков рекурсивным? - если у меня в папке CHUNK будет структура сложнее одной папки »
Можно. И сразу ответьте, что делать, если там окажется несколько файлов с подходящим именем (в разных каталогах)?

2. можно ли сделать чтобы скрипт не заменял скопированный чанк если он уже есть в папке а именовал его как-то с суфиксом? »
Можно. Как именно именовал «как-то с суфиксом»?

3. можно ли добавить возможность копирования чанков с их оригиналными именами рядом с исходным файлом в папку CHUNKS? »
Можно.

4. можно ли как-то исбежать шаг разрешения выполнения подобных скриптов на компе? »
А в чём проблема-то однократно разрешить исполнение локальных неподписанных скриптов?

p.s.: можно ли как-то транслитировать этот код в auto-it и зашить в exe? »
Полагаю, что можно.

Tosyk
30-06-2018, 10:16
что делать, если там окажется несколько файлов с подходящим именем (в разных каталогах)? »Можно. Как именно именовал «как-то с суфиксом»? »
максимальная глубина, на которую я расчитываю это в папке CHUNKS будут лежать ещё две папки: CHUNKS0 и CHUNKS1. поэтому можно к файлам применять суфикс ch0 и ch1 соответственно
А в чём проблема-то однократно разрешить исполнение локальных неподписанных скриптов? »однократно за сессию или за всю жизнь винды? и может ли это привести к печальным последствиям безопасности?

Iska
30-06-2018, 12:20
максимальная глубина, на которую я расчитываю это в папке CHUNKS будут лежать ещё две папки: CHUNKS0 и CHUNKS1. поэтому можно к файлам применять суфикс ch0 и ch1 соответственно »
Ответьте, пожалуйста, на те вопросы, которые я задавал. Ни на какие другие, не заданные мною вопросы, отвечать не нужно.

однократно за сессию или за всю жизнь винды? и может ли это привести к печальным последствиям безопасности? »
Вот здесь (http://forum.oszone.net/post-2819631.html#post2819631) я приводил две ссылки. Прочтите их. Или — прочтите ещё раз.

Tosyk
30-06-2018, 12:46
что делать, если там окажется несколько файлов с подходящим именем (в разных каталогах)? »копировать оба в исходный каталог
Как именно именовал «как-то с суфиксом»? »в качестве индекса использовать имя исходной папки

Iska
01-07-2018, 07:45
Tosyk, чем больше я пытаюсь осмыслить все озвученные Вами хотелки, тем меньше они мне нравятся. Если реализовать всё задуманное — получится полная каша.

В общем — рекурсивный поиск и нумерация найденных дубликатов. Существующие файлы по месту назначения по-прежнему будут переписываться, не вижу никакого смысла менять данное поведение.
param(
[Parameter(Mandatory = $true)][System.String]$SourceFile,
[System.String]$sCHUNKFolder = 'C:\Мои проекты\0167\CHUNK'
)

$aByte4Find = [System.Byte[]](0xFF, 0xFF, 0xFF, 0xFF)

if(Test-Path -Path $SourceFile -PathType Leaf) {
$oSourceFile = [System.IO.FileInfo]$SourceFile

if(Test-Path -Path $sCHUNKFolder -PathType Container) {
Write-Host "[$($oSourceFile.FullName)]" -ForegroundColor Yellow

$aByteContent = [System.IO.File]::ReadAllBytes($oSourceFile.FullName)
$iCount = 0

for($i = 0; $i -le $aByteContent.Length - $aByte4Find.Length - 1; $i++) {
$bFound = $true

for($j = 0; $j -le $aByte4Find.Length - 1; $j++) {
if($aByteContent[$i + $j] -ne $aByte4Find[$j]) {
$bFound = $false
break
}
}

if($bFound) {
$sFoundFileName = [System.BitConverter]::ToString($aByteContent[$($i - 16) .. $($i - 1)]) -replace '-', ''

Write-Host "`tOffset: $i"
Write-Host "`tFound file name: $sFoundFileName"

$sChunkFile = "$sCHUNKFolder\$sFoundFileName.chunk"

$cChunkFiles = @(Get-ChildItem -Path "$sCHUNKFolder\$sFoundFileName.chunk" -File -Recurse)

if($cChunkFiles.Count) {
$iCount++
$jCount = 0

$cChunkFiles | ForEach-Object -Process {
$jCount++
$sDestFileName = "$($oSourceFile.BaseName)_$($iCount.ToString("00"))_$($jCount.ToString("00")).chunk"

Write-Host "`tFile [$($_.FullName)] found!" -ForegroundColor Green
Write-Host "`tCopy to [$($oSourceFile.DirectoryName)] as [$sDestFileName]." -ForegroundColor Green
[System.IO.File]::Copy($sChunkFile, "$($oSourceFile.DirectoryName)\$sDestFileName", $true)
}
} else {
Write-Host "`tFile(s) [$sFoundFileName.chunk] not found in folder [$sCHUNKFolder]!" -ForegroundColor Red
}

Write-Host ''
}
}
} else {
Write-Host "Can't find CHUNK folder [$sCHUNKFolder]." -ForegroundColor Red
}
} else {
Write-Host "Can't find source file [$SourceFile]." -ForegroundColor Red
}

Write-Host 'Press Enter to close...' -NoNewline; Read-Host | Out-Null

Tosyk
01-07-2018, 11:38
вроде бы начало работать, но через 2 минуты выдало эксепшены:

[D:\_r\fb\interstate_76_premium_pc\_ex_test\bundles\res\characters\heads\head01\
head01_enemy_mesh 70110000000000001001000070009400.MeshSet]
Offset: 212
Found file name: 1689A37995A680D6AABEDA914DD62F89
File [D:\_r\fb\interstate_76_premium_pc\_ex_test\chunks\chunks0\1689a
37995a680d6aabeda914dd62f89.chunk] found!
Copy to [D:\_r\fb\interstate_76_premium_pc\_ex_test\bundles\res\characte
rs\heads\head01] as [head01_enemy_mesh 70110000000000001001000070009400_01_01.ch
unk].
Исключение при вызове "Copy" с "3" аргументами: "Файл 'D:\_r\fb\interstate_76_p
remium_pc\_ex_test\chunks\1689A37995A680D6AABEDA914DD62F89.chunk' не найден."
D:\_r\fb\interstate_76_premium_pc\tools\ps_chunks.ps1:47 знак:64
+ [System.IO.File]::Copy($sChunkFile, "$($oSourceFile.D
ire ...
+ ~~~~~~~~~~~~~~
~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FileNotFoundException


Offset: 388
Found file name: 4359EB953C735D805EE6F7B155BC403B
File [D:\_r\fb\interstate_76_premium_pc\_ex_test\chunks\chunks1\4359e
b953c735d805ee6f7b155bc403b.chunk] found!
Copy to [D:\_r\fb\interstate_76_premium_pc\_ex_test\bundles\res\characte
rs\heads\head01] as [head01_enemy_mesh 70110000000000001001000070009400_02_01.ch
unk].
Исключение при вызове "Copy" с "3" аргументами: "Файл 'D:\_r\fb\interstate_76_p
remium_pc\_ex_test\chunks\4359EB953C735D805EE6F7B155BC403B.chunk' не найден."
D:\_r\fb\interstate_76_premium_pc\tools\ps_chunks.ps1:47 знак:64
+ [System.IO.File]::Copy($sChunkFile, "$($oSourceFile.D
ire ...
+ ~~~~~~~~~~~~~~
~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FileNotFoundException


Offset: 564
Found file name: B59CF3BB396E1BC16C1585473170565F
File [D:\_r\fb\interstate_76_premium_pc\_ex_test\chunks\chunks1\b59cf
3bb396e1bc16c1585473170565f.chunk] found!
Copy to [D:\_r\fb\interstate_76_premium_pc\_ex_test\bundles\res\characte
rs\heads\head01] as [head01_enemy_mesh 70110000000000001001000070009400_03_01.ch
unk].
Исключение при вызове "Copy" с "3" аргументами: "Файл 'D:\_r\fb\interstate_76_p
remium_pc\_ex_test\chunks\B59CF3BB396E1BC16C1585473170565F.chunk' не найден."
D:\_r\fb\interstate_76_premium_pc\tools\ps_chunks.ps1:47 знак:64
+ [System.IO.File]::Copy($sChunkFile, "$($oSourceFile.D
ire ...
+ ~~~~~~~~~~~~~~
~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FileNotFoundException


Offset: 740
Found file name: 2D70DB36CE8988E189CEBD5F24B75895
File [D:\_r\fb\interstate_76_premium_pc\_ex_test\chunks\chunks1\2d70d
b36ce8988e189cebd5f24b75895.chunk] found!
Copy to [D:\_r\fb\interstate_76_premium_pc\_ex_test\bundles\res\characte
rs\heads\head01] as [head01_enemy_mesh 70110000000000001001000070009400_04_01.ch
unk].
Исключение при вызове "Copy" с "3" аргументами: "Файл 'D:\_r\fb\interstate_76_p
remium_pc\_ex_test\chunks\2D70DB36CE8988E189CEBD5F24B75895.chunk' не найден."
D:\_r\fb\interstate_76_premium_pc\tools\ps_chunks.ps1:47 знак:64
+ [System.IO.File]::Copy($sChunkFile, "$($oSourceFile.D
ire ...
+ ~~~~~~~~~~~~~~
~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FileNotFoundException


Press Enter to close...ничего не скопировало

Iska
02-07-2018, 12:37
Поменял одну неправильную строку и убрал одну лишнюю:
param(
[Parameter(Mandatory = $true)][System.String]$SourceFile,
[System.String]$sCHUNKFolder = 'C:\Мои проекты\0167\CHUNK'
)

$aByte4Find = [System.Byte[]](0xFF, 0xFF, 0xFF, 0xFF)

if(Test-Path -Path $SourceFile -PathType Leaf) {
$oSourceFile = [System.IO.FileInfo]$SourceFile

if(Test-Path -Path $sCHUNKFolder -PathType Container) {
Write-Host "[$($oSourceFile.FullName)]" -ForegroundColor Yellow

$aByteContent = [System.IO.File]::ReadAllBytes($oSourceFile.FullName)
$iCount = 0

for($i = 0; $i -le $aByteContent.Length - $aByte4Find.Length - 1; $i++) {
$bFound = $true

for($j = 0; $j -le $aByte4Find.Length - 1; $j++) {
if($aByteContent[$i + $j] -ne $aByte4Find[$j]) {
$bFound = $false
break
}
}

if($bFound) {
$sFoundFileName = [System.BitConverter]::ToString($aByteContent[$($i - 16) .. $($i - 1)]) -replace '-', ''

Write-Host "`tOffset: $i"
Write-Host "`tFound file name: $sFoundFileName"

$cChunkFiles = @(Get-ChildItem -Path "$sCHUNKFolder\$sFoundFileName.chunk" -File -Recurse)

if($cChunkFiles.Count) {
$iCount++
$jCount = 0

$cChunkFiles | ForEach-Object -Process {
$jCount++
$sDestFileName = "$($oSourceFile.BaseName)_$($iCount.ToString("00"))_$($jCount.ToString("00")).chunk"

Write-Host "`tFile [$($_.FullName)] found!" -ForegroundColor Green
Write-Host "`tCopy to [$($oSourceFile.DirectoryName)] as [$sDestFileName]." -ForegroundColor Green
[System.IO.File]::Copy($_.FullName, "$($oSourceFile.DirectoryName)\$sDestFileName", $true)
}
} else {
Write-Host "`tFile(s) [$sFoundFileName.chunk] not found in folder [$sCHUNKFolder]!" -ForegroundColor Red
}

Write-Host ''
}
}
} else {
Write-Host "Can't find CHUNK folder [$sCHUNKFolder]." -ForegroundColor Red
}
} else {
Write-Host "Can't find source file [$SourceFile]." -ForegroundColor Red
}

Write-Host 'Press Enter to close...' -NoNewline; Read-Host | Out-Null
Как теперь?

Tosyk
02-07-2018, 23:31
всё классно работает!

можете ли добавить копирование эти же чанков с их оригинальными именами в папку CHUNKS рядом с исходным файлом? для консистентности

Iska
06-07-2018, 15:37
Tosyk, не мытьём, так катаньем, да ;)?

Добавьте:
if(-not [System.IO.Directory]::Exists("$($oSourceFile.DirectoryName)\CHUNKS")) {
[System.IO.Directory]::CreateDirectory("$($oSourceFile.DirectoryName)\CHUNKS")
}
[System.IO.File]::Copy($_.FullName, "$($oSourceFile.DirectoryName)\CHUNKS\$($_.Name)", $true)

после:
[System.IO.File]::Copy($_.FullName, "$($oSourceFile.DirectoryName)\$sDestFileName", $true)




© OSzone.net 2001-2012