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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - копирование файлов по hash-имени из HEX исходного файла

Ответить
Настройки темы
CMD/BAT - копирование файлов по hash-имени из HEX исходного файла

Аватара для Tosyk

Старожил


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

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


всем привет,

1. имеется папка с кучей файлов. у файлов вместо имени hash-абракадабра типа: 000ec4d858ebbaa80621fc19a608599f.chunk или aa8d9cd800e0c17bc5b03d488ab17572.chunk
2. имеется набор файлов с расширением EBX (и нормальными именами), в хексе которых эти hash-имена.

задача вот такая вот: кидаем EBX на BAT файл и соответствующие файлы .chunk копируются к исходному EBX и, было бы круто, эти скопированные .chunk файлы переименовывать в имя EBX с числовым индексом.

подскажите как такое реализовать.

p.s.: обнаружил, что после каждого hash-имени внутри EBX идёт hex-значение: FFFFFFFF

Отправлено: 21:24, 26-06-2018

 

Аватара для Tosyk

Старожил


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

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


вроде бы начало работать, но через 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...
ничего не скопировало

Отправлено: 11:38, 01-07-2018 | #31



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

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


Ветеран


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

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


Поменял одну неправильную строку и убрал одну лишнюю:
Скрытый текст
Код: Выделить весь код
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

Как теперь?
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:37, 02-07-2018 | #32


Аватара для Tosyk

Старожил


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

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


всё классно работает!

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

Отправлено: 23:31, 02-07-2018 | #33


Ветеран


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

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


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)

Последний раз редактировалось Iska, 06-07-2018 в 15:44. Причина: Заменил командлет Test-Path на [System.IO.Directory]::Exists()


Отправлено: 15:37, 06-07-2018 | #34



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - копирование файлов по hash-имени из HEX исходного файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Копирование файлов по списку из файла foma24 Скриптовые языки администрирования Windows 2 30-12-2022 15:35
CMD/BAT - [решено] Копирование всех файлов по сети с указанием имени пользователя Elven Скриптовые языки администрирования Windows 1 10-04-2014 17:41
CMD/BAT - копирование выбранного файла в определенное место и добавление к имени файла даты x800 Скриптовые языки администрирования Windows 0 19-02-2014 20:39
CMD/BAT - перемещение файлов в каталог созданный из части имени файла surrender1 Скриптовые языки администрирования Windows 9 10-10-2013 14:42
CMD/BAT - [решено] Копирование имени файла и определённой строки из него в другой файл Liquid Ocelot Скриптовые языки администрирования Windows 10 05-07-2013 09:35




 
Переход