• Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.

[CMD] Нужно упаковать множество каталогов, каждый в отдельный файл

Davem

Новый пользователь
Сообщения
2
Симпатии
0
#1
Нужно упаковать множество каталогов, каждый в отдельный файл
Каждый каталог содержит сотни маленьких файлов типа
RODRIGUES_BIMBA.CT.HEAD_INNEREAR_(ADULT).0001.0001.2017.02.19.11.18.15.585559.202195291.IMA

из этого имени файла нужно взять название слева до "." на этом примере : RODRIGUES_BIMBA
Упаковать содержимое каталога при помощи ultraISO в RODRIGUES_BIMBA.ISZ и Присвоить дату изменения файла точно такую же, как у первого попавшегося файла внутри пакуемого каталога. Для изменения даты думал использовать TouchFile.exe

Перепробовал массу вариантов, не получаеться передать переменные за цикл FOR, внутри цикла есть значение, снаружи нет . Пробовал SET i=%%i, все равно так и не понял как это делать.
Заготовка тут, до установки времени так и не дошел, застрял на формировании имени архива и передачи его в ultraISO:

CMD/BATCH:
@ECHO OFF
SetLocal EnableDelayedExpansion
Set origFold=%~dp0
for /d %%a in (*) do (
    echo %%~nxa
    cd %%~nxa
    for /r %%a in (*.IMA) do (
        echo %%~na>tempName.tmp
        for /f "tokens=1 delims=." %%g in (tempName.tmp) do (
        SET g=%%g rem как передать в ultraISO ???? так и не понял
            cd..
            exit
            )
        )
      
    echo %%~ta>temp.tmp
    for /f "tokens=1 delims= " %%h in (temp.tmp) do (
        echo %%h>temp2.tmp
        "C:\Program Files (x86)\UltraISO\UltraISO.exe" -udf -volu %%~nxa -imax -md5 -out "%origFold%%%~nxa_%g%.isz" -file "%%~dpnxa\*"
        )
)
Подскажите как реализовать
Заранее благодарен
 
Последнее редактирование модератором:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,593
Симпатии
5,446
#2
Здравствуйте!
Добро пожаловать на SafeZone !

Для изменения даты думал использовать TouchFile.exe
Можно так. Можно на своём компе дату временно подменять, только повышенные привилегии потребуются.

echo %%~na>tempName.tmp
for /f "tokens=1 delims=." %%g in (tempName.tmp) do (
можно сразу
Код:
for /f "tokens=1 delims=." %%g in ("%%~a") do (
cd.. - сразу убирайте.
а от exit быстрее не будет, цикл все равно сперва перечислит ВСЕ файлы. Мало того прервёт работу пакетного файла.
Через !i!
Через !g! получать.
 

Davem

Новый пользователь
Сообщения
2
Симпатии
0
#3
Вот что получилось, работает нормально.
Чуть даже пересмотрел постановку задачи, все исходные данные в имени файла можно взять и дату создания тоже.
CMD/BATCH:
@ECHO OFF
SetLocal EnableDelayedExpansion
Set origFold=%~dp0
for /d %%a in (*) do (
    cd %%~dpnxa
    for /r %%a in (*.ima) do (
        for /f "tokens=1,2,3,6,7,8 delims=." %%i in ("%%~nxa") do (
            set i=%%i_%%j_%%k
            set t=%%m-%%n-%%l
            )
        )
    cd %origFold%
    echo !i! rem Имя архива
    echo !t! rem новая Дата архива, взял их длинного названия файла 2017.02.19 только формат mm-dd-yyyy
    "C:\Program Files (x86)\UltraISO\UltraISO.exe" -udf -volu !i! -imax -md5 -out "%origFold%!i!.isz" -file "%%~dpnxa\*"
    FileTouch.exe /C /W /D !t! !i!.isz
    )
)

rem RODRIGUES_BIMBA.CT.HEAD_INNEREAR_(ADULT).0001.0001.2017.02.19.11.18.15.585559.202195291.IMA
Спасибо за подсказки!
 
Последнее редактирование модератором: