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

Компьютерный форум 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 | Цитировать


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

Последний раз редактировалось Tosyk, 29-06-2018 в 00:23.


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



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

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


Ветеран


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

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


Tosyk, ну, если у меня работает, а у Вас нет, значит, явно что-то не так.

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

Отправлено: 00:44, 29-06-2018 | #22


Аватара для Tosyk

Старожил


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

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


я бы сделал скриншот, но как? окно ведь мигает. можно как-то запаузить его?

Отправлено: 09:14, 29-06-2018 | #23


Ветеран


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

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


Добавьте в самый конец Sample.ps1:
Код: Выделить весь код
Read-Host | Out-Null
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:57, 29-06-2018 | #24


Аватара для Tosyk

Старожил


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

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


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

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


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

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

Отправлено: 21:40, 29-06-2018 | #25


Ветеран


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

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


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

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

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

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

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

Отправлено: 23:51, 29-06-2018 | #26


Аватара для Tosyk

Старожил


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

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


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

Отправлено: 10:16, 30-06-2018 | #27


Ветеран


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

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


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

Цитата Tosyk:
однократно за сессию или за всю жизнь винды? и может ли это привести к печальным последствиям безопасности? »
Вот здесь я приводил две ссылки. Прочтите их. Или — прочтите ещё раз.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:20, 30-06-2018 | #28


Аватара для Tosyk

Старожил


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

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


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

Отправлено: 12:46, 30-06-2018 | #29


Ветеран


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

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


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
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:45, 01-07-2018 | #30



Компьютерный форум 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




 
Переход