2016-08-02 24 views
5

dawno temu fanka stackoverflow, publikacja po raz pierwszy. Próbowałem wyszukiwać przez prawie godzinę i nie mogłem znaleźć podobnego problemu.Wyszukiwanie ciągu w wielu archiwach zip

Oto, co mam;

Na serwerze internetowym z systemem Windows znajduje się około 1000 plików zip, z których każdy zawiera dziesiątki plików dzienników. Mam już skrypt, który przechodzi przez każde archiwum i usuwa wszystkie oprócz jednego określonego typu pliku (w celu zapisania przestrzeni dyskowej i usunięcia rzeczy, których nie potrzebuję). Następnie skrypt rozpakowuje każde archiwum do własnego folderu. I wiem, jak zakodować odwrotność tego, żeby je spakować, kiedy skończę.

Oto, co muszę wymyślić;

Po uruchomieniu wcześniej wspomnianego skryptu (nazywamy go garbageman, ponieważ czyści śmieci w plikach zip) muszę przejrzeć pozostałe 5 lub 6 plików w każdym z nowo utworzonych rozpakowanych folderów i sprawdzić dla określonego ciągu w każdym pliku. Jeśli znajdę ciąg, usuwam wszystko, co nie jest tym ciągiem, i zapisuję go w pliku o nazwie "export.txt" w tym folderze. Następnie przechodzę do następnego rozpakowanego pliku i tak dalej. Po zakończeniu muszę ponownie skompresować wszystko razem do własnego archiwum

Oto, co mam dla kodu do tej pory. Każda pomoc jest niezwykle doceniana.

cd "C:\Program Files\7-Zip" 
FOR %%c in (C:\Users\xxxxxx\Desktop\LogQueue\*.*) DO 7z d %%c "-x!xstore*" -r 


FOR /R "C:\Users\xxxxxx\Desktop\LogQueue" %%I in ("*.zip") do (
    "%ProgramFiles%\7-Zip\7z.exe" x -y -o"%%~dpnI" "%%~fI" 
) 

cd "C:\Users\xxxxxxx\Desktop\LogQueue" 

FOR /R "C:\Users\xxxxxx\Desktop\LogQueue" %%I in ("*.*") do (
    findstr "xxxxxxxx_eReceipt" %%~fI > %%~dpnI\export.txt 
    pause 
) 

for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%%X.zip" "%%X\" 
+1

Domyślam się, że to nie jest tak naprawdę DOS, ale wiersz polecenia w niektórych oknach, czy to prawda? – Victor

+0

Czy chcesz usunąć każdy rozpakowany plik po zapisaniu go z niego w "export.txt"? Usuń też tag DOS z twojego pytania i dodaj Cmd. – sambul35

+0

@ sambul35 Byłoby miło, gdyby to usunięto, ale nie koniec świata, jeśli tak się nie stanie. Największą rzeczą, którą złapałem, jest napisanie instrukcji for, która przejdzie do każdego rozpakowanego folderu, przeszuka ciąg znaków i zapisze plik export.txt. – Patrick

Odpowiedz

1

Jest to edit:

Skrypt ten powinien robić, co chcesz.

Zmieniaj tylko zmienne sourcedir i mystring.

export.txt będzie znajdować się w pliku o nazwie Storage w katalogu głównym partii.

:ScriptA 
@ECHO ON 
MKDIR "%CD%\Storage" 
MKDIR "%USERPROFILE%\Desktop\Outx" 
GOTO :ScriptB 

:ScriptB 
::REM ONLY CHANGE 
SET "sourcedir=%USERPROFILE%\Desktop\Test" 
FOR /R "%sourcedir%\" %%a in (*.txt) do copy "%%a" "%CD%\Storage" 
:ScriptC 

:ScriptC 
@ECHO OFF 
SETLOCAL 
SET "VARA=%CD%\Storage" 
SET "VARB=%USERPROFILE%\Desktop\Out" 
::REM ONLY CHANGE 
SET "mystring=PUT_STRING_HERE" 
FOR %%a IN ("%VARA%\*.txt") DO FINDSTR "%mystring%" "%%a">nul&IF NOT ERRORLEVEL 1 FINDSTR "%mystring%" "%%a">"%VARB%\%%~nxa" 
DEL /F "%CD%\Storage\*.txt" 
GOTO :ScriptD 

:ScriptD 
@ECHO ON 
COPY /B "%USERPROFILE%\Desktop\Outx\*.txt" "%CD%\Storage\export.txt" 
RD /S /Q "%USERPROFILE%\Desktop\Outx" 
goto :eof 
Powiązane problemy