logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] Skrypt wsadowy: Kompresja pliku za pomocą makecab.exe metodą przciągnij i upuść

Gelip 17 Sie 2024 15:28 345 5
REKLAMA
  • #1 21194029
    Gelip
    Poziom 36  
    Posty: 5217
    Pomógł: 321
    Ocena: 607
    Chcę metodą przeciągania dowolnego pliku na plik wsadowy compress.cmd skompresować go za pomocą makecab.exe ale aby skompresowany plik miał nazwę dużymi literami a trzecia litera rozszerzenia zmieniła się na znak podkreślnika _ np. mam plik acpi.sys a po kompresji ma być ACPI.SY_
    Takie coś kompresuje wszystkie pliki z folderu org i zapisuje skompresowane w folderze comp ale małymi literami i gdy kliknę na niego dwa razy a nie przeciągnę oryginalny plik na skrypt .cmd:
    compress.cmd
    @echo off
    for /f "delims=" %%a in ('dir/b/s org') do makecab /d compressiontype=lzx /d compressionmemory=21 "%%a" /l comp >nul


    Dodano po 1 [godziny] 12 [minuty]:

    Takie coś działa metodą przeciągania pliku ale tworzy drugie rozszerzenie .compressed czyli mamy acpi.sys.compressed
    @echo off
    makecab /D CompressionType=LZX /D CompressionMemory=21 %1 %1.compressed


    W necie znalazłem iż powinno działać tak ale nie działa:
    @echo off
    makecab /D CompressionType=LZX /D CompressionMemory=21 %1 %2


    Polecenie makecab samo tworzy nazwę pliku skompresowanego z tym podkreślnikiem jeśli nie podamy docelowej lokalizacji:
    Microsoft (R) Cabinet Maker - Version 5.2.3790.1830
    Copyright (c) Microsoft Corporation. All rights reserved..
    
    MAKECAB [/V[n]] [/D var=value ...] [/L dir] source [destination]
    MAKECAB [/V[n]] [/D var=value ...] /F directive_file [...]
    
      source         File to compress.
      destination    File name to give compressed file.  If omitted, the
                     last character of the source file name is replaced
                     with an underscore (_) and used as the destination.
      /F directives  A file with MakeCAB directives (may be repeated).
      /D var=value   Defines variable with specified value.
      /L dir         Location to place destination (default is current directory).
      /V[n]          Verbosity level (1..3).
  • REKLAMA
  • #2 21194167
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1463
    "Ja bym" - mam świadomość ze udzielanie rad to łatwe - w pełnym momencie zaprzestał kopania się z koniem i zrobił np w Pythonie (ma jakieś moduły do plików CAB).

    Pomysł "przy kawce", nie znam tych modułów, nie robiłem
  • REKLAMA
  • #3 21194207
    Gelip
    Poziom 36  
    Posty: 5217
    Pomógł: 321
    Ocena: 607
    @JacekCz
    A ten znowu z pajtonami. Ja nie chce żadnego pajtona tylko ma być jako skrypt wsadowy. Jak się nie znasz na BAT to nie zabieraj głosu w dyskusji. W każdym temacie na temat skryptów BAT w........sz swoje 3 grosze jaki to BAT jest beeee....
    Ehhh...
    https://www.elektroda.pl/rtvforum/topic3994565.html#20685962

    Nie wiem dlaczego nie działa z %1
    @echo off
    makecab /d compressiontype=lzx /d compressionmemory=21 %1

    jak dam:
    @echo off
    echo %1
    pause

    to w CMD pokazuje mi pełną ścieżkę do pliku, który przeciągnąłem na skrypt np. D:\compress\acpi.sys
    Jak wejdę w folder D:\compress w CMD i wykonam polecenie:
    makecab /d compressiontype=lzx /d compressionmemory=21 acpi.sys

    to elegancko tworzy plik acpi.sy_ w tym samym katalogu.
    Nie wiem co jest grane.

    Dodano po 23 [minuty]:

    Jest mam, działa :-) :-) - znowu sam znalazłem rozwiązanie. Trzeba użyć samej nazwy pliku bez całej ścieżki:
    @echo off
    pushd "%~dp1" &makecab /D CompressionType=LZX /D CompressionMemory=21 "%~nx1"


    W zmiennej %1 jest cała ścieżka do pliku, który przeciągnęliśmy na skrypt: D:\compress\acpi.sys
    W zmiennej %~dp1 jest D:\compress\
    W zmiennej %~nx1 jest acpi.sys

    Jak dodamy do skryptu wyświetlanie zmiennych i poziom verbose V2 to widać o co chodzi:
    @echo off
    pushd "%~dp1" &makecab /V2 /D CompressionType=LZX /D CompressionMemory=21 "%~nx1"
    echo:
    echo %1
    echo %~dp1
    echo %~nx1
    pause

    Zrzut ekranu z programu CMD pokazujący wynik komendy makecab dla pliku acpi.sys.

    Tutaj znalazłem rozwiązanie: CAB.bat

    Ale jeszcze przydało by się zmienić na duże litery.
  • REKLAMA
  • Pomocny post
    #4 21194267
    clubs
    Poziom 38  
    Posty: 2219
    Pomógł: 629
    Ocena: 406
    Gelip napisał:
    Ale jeszcze przydało by się zmienić na duże litery.

    Trzeba dołożyć trochę kodu.
    Kod: Dos
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
REKLAMA