Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   создание бат для архивирования файла с переименованием архива и файла в архиве (http://forum.oszone.net/showthread.php?t=350026)

deathspirit 12-11-2021 14:14 2971656

создание бат для архивирования файла с переименованием архива и файла в архиве
 
Ребята помогите!!! есть файлы :*.sigs, *.zip.sigm, *.zip. Мне нужно файл с расширением*.zip.sigm переименовать (для примера s52006m520087_21102_445136_00.zip.sigm в M520087S52006_21102_445136_00.zip.sigm то есть сменить последовательность символов с s52006m520087-на M520087S52006 из примера понятно что берутся символы m520087 и s52006 и переставляются местами )
Вот код он работает

Echo off
::chcp 1251
setlocal enabledelayedexpansion

rem этот блок переименовывает файл sigm

for %%i in ("C:\Users\%USERNAME%\Desktop\reestry\*.zip.sigm") do (set c=%%~ni
ren "C:\Users\%USERNAME%\Desktop\reestry\%%~ni.sigm" "!c:~6,7!!c:~0,6!!c:~13,100!.sigm")

pause;


затем упаковать все файлы и сам архив переименовать по такому же принципу
вот код он работает


Echo off
::chcp 1251
setlocal enabledelayedexpansion

for %%i in ("C:\Users\%USERNAME%\Desktop\reestry\*.sigs") do (
set b=%%i
"C:\Program Files\7-zip\7z.exe" a -tzip "!b:~0,-8!oms" "%%i"

)
for %%i in ("C:\Users\%USERNAME%\Desktop\reestry\*.sigm") do (
set b=%%i
"C:\Program Files\7-zip\7z.exe" a -tzip "!b:~0,-8!oms" "%%i"
)


for %%i in ("C:\Users\%USERNAME%\Desktop\reestry\*.zip") do ("C:\Program Files\7-zip\7z.exe" a -tzip "C:\Users\%USERNAME%\Desktop\reestry\%%~ni.oms" "%%i")


del "C:\Users\%USERNAME%\Desktop\reestry\*.zip"
del "C:\Users\%USERNAME%\Desktop\reestry\*.sigs"
del "C:\Users\%USERNAME%\Desktop\reestry\*.sigm"


for %%i in ("C:\Users\%USERNAME%\Desktop\reestry\*.oms") do (
set c=%%~ni
ren "C:\Users\%USERNAME%\Desktop\reestry\%%~ni.oms" "!c:~6,7!!c:~0,6!!c:~13,100!.oms"
)

pause;

ОН РАБОТАЕТ но если я не переименовываю файл s52006m520087_21102_445136_00.zip.sigm в M520087S52006_21102_445136_00.zip.sigm то создаются два архива. P/S первоначально файлы в названии все одинаковы и все работает .. пробовал и по маске и так не получается помогите что я не так делаю или переработал башка не варит.... За ранее спасибо!

alpap 12-11-2021 15:17 2971665

вот переименование распакованных файлов
PowerShell
Код:

$files = gci *.sigm -af
$files|% {
  $_.BaseName -Match '(\D\d+)(\D\d+)(.*)'|Out-Null
  $newName = '{1}{0}{2}{3}' -f $Matches[1], $Matches[2], $Matches[3], $_.Extension
  rni $_.FullName $newName
}


megaloman 12-11-2021 15:27 2971667

Если только переименование, то:
Код:

@Echo Off
cls
        Set "BoxIn=Z:\Box_In"
        Set "Mask=^s[0-9][0-9][0-9][0-9][0-9]m[0-9][0-9][0-9][0-9][0-9][0-9]_.*\.zip\.sigm$"
        Set "L0=13"
        Set "L1=0,6"
        Set "L2=6,7"
 
        For /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%\*.*" /B /A:-D ^|FindStr /R /I /C:"%Mask%"`) Do (
                Set "Name=%%f"
                Call Ren "%BoxIn%\%%f" %%Name:~%L2%%%%%Name:~%L1%%%%%Name:~%L0%%%"
        )
pause
Exit /B


deathspirit 12-11-2021 15:45 2971671

нет... мне нужно упаковать файлы в один архив с разными расширениями и именами. второй скрипт работает если имена файлов совпадают... а если имена файлов разные то файлы упаковываются в разные архивы.. что мне нужно изменить в батнике, что бы он упаковал в архив разные файлы . если прочитать внимательнее. то я написал . что первоначально нужно: сначала переименовать один файл и потом упаковать файлы с разными именами в один архив и обозвать архив так же как и этот переименованный файл. вот более понятно надеюсь написал. Спасибо!

просто не пойму что не так делаю... второй скрипт работает как надо . если все файлы с именем одинаковы. как только переименовываю файл в M520087S52006_21102_445136_00.zip.sigm он упаковывается в другой архив .

deathspirit 12-11-2021 16:00 2971673

сама задача выглядит так: поменять местами символы файла: s52006m520087_21102_445136_00.zip.sigm в M520087S52006_21102_445136_00.zip.sigm, упаковать файлы в один архив: s52006m520087_21102_445136_00.zip.sigs, M520087S52006_21102_445136_00.zip.sigm, S52006M520087_21102_445136_00.zip. И сам архив zip cохранить с именем как у M520087S52006_21102_445136_00.zip.sigm то есть, должен получится архив M520087S52006_21102_445136_00.zip а в нем M520087S52006_21102_445136_00.zip.sigm,S52006M520087_21102_445136_00.zip,s52006m520087_21102_445136_ 00.zip.sigs)

megaloman 12-11-2021 20:18 2971711

deathspirit,
Как-то туговато
Цитата:

поменять местами символы файла:
s52006m520087_21102_445136_00.zip.sigm
M520087S52006_21102_445136_00.zip.sigm, упаковать файлы в один архив:
s52006m520087_21102_445136_00.zip.sigm
M520087S52006_21102_445136_00.zip.sigm,
S52006M520087_21102_445136_00.zip. И сам архив zip cохранить с именем как у
M520087S52006_21102_445136_00.zip.sigm то есть, должен получится архив

M520087S52006_21102_445136_00.zip а в нем

M520087S52006_21102_445136_00.zip.sigm,
S52006M520087_21102_445136_00.zip,
s52006m520087_21102_445136_ 00.zip.sigs
Не догоняю:
Какие исходные файлы:
s52006m520087_21102_445136_00.zip.sigm
s52006m520087_21102_445136_00.zip.sigs -???????????
S52006M520087_21102_445136_00.zip
В том числе и .zip?

В создаваемом архиве M520087S52006_21102_445136_00.zip 3 файла:
M520087S52006_21102_445136_00.zip.sigm,
S52006M520087_21102_445136_00.zip,
s52006m520087_21102_445136_ 00.zip.sigs
В том числе и .zip?

И, главное, набор этих 3 файлов единственный, или в папке есть аналогичные файлы немного с другими именами, что меняется в именах? B в ответе должно получиться много файлов типа M520087S52006_21102_445136_00.zip с нужным набором имен? Что при этом надо делать с исходными файлами?
Вариант:
Код:

@Echo Off
cls
        Set "BoxIn=Z:\Box_In"
        Set "Mask=^s[0-9][0-9][0-9][0-9][0-9]m[0-9][0-9][0-9][0-9][0-9][0-9]_"
        Set "L0=13,-9"
        Set "L1=0,6"
        Set "L2=6,7"

        Set "Ext1=zip.sigm"
        Set "Ext2=zip.sigs"
        Set "Ext3=zip"

        Set Arc="C:\Program Files\7-Zip\7z.exe" a -tzip -sdel
       
        Set "MExt=%Ext1:.=\.%"
        Pushd %BoxIn% || (Echo Folder "%BoxIn%" Not found. &Pause &Exit /B 2)
        For /F "usebackq delims=" %%f In (`2^>nul Dir "*.*" /B /A:-D ^|FindStr /R /I /C:"%Mask%.*\.%MExt%$"`) Do (
                Set "Name=%%f"
                Call :MyArc "%%f" "%%Name:~%L1%%%" "%%Name:~%L2%%%" "%%Name:~%L0%%%"
        )
        Popd
pause
Exit /B

:MyArc
        Ren "%~1" "%~3%~2%~4.%Ext1%"
        %Arc% "%~3%~2%~4" "%~3%~2%~4.%Ext1%" "%~2%~3%~4.%Ext2%" "%~2%~3%~4.%Ext3%"
Exit /B

rem 0    6      13
rem | 6  ||  7  ||              |  -9  |
rem s52006m520087_21102_445136_00.zip.sigm
rem |    13    |



Время: 09:09.

Время: 09:09.
© OSzone.net 2001-